0

正確に「11000060K2」を検索しようとしています

    from solr import SolrConnection
    from sunburnt import RawString

    term = "11000060K2"
    solr_conn = SolrConnection()
    scoreDocs = solr_conn.si.query(activityemail=RawString(term)).paginate(start=0, rows=1000).execute()
    params_dict = scoreDocs.params
    for key, keyvalue in params_dict:
        logging.debug ("param %s    value %s "  %(key, keyvalue) )

戻り値:

param start    value 0 
param q    value activityemail:11000060K2 
param rows    value 1000 

そして、他の用語に一致する一連の結果。

/ を返すクエリで 11000060K2 に一致するドキュメントのみを返すようにしたい:

param q    value activityemail:"11000060K2"

私が間違っていることを教えてください。

4

1 に答える 1

0

これを実現する方法は、Solr スキーマ構成 ( schema.xml)、特にフィールドに関連付けられたフィールド タイプによって異なりますactivityemail。現在、複数の結果を受け取っている場合は、特定のフィールド タイプのフィルター/アナライザーが複数の一致を引き起こしている可能性があります。Solr のsolr.StrFieldフィールド クラスは、このタイプのフィールドの値が逐語的に保存され、クエリが完全に一致するため、フィールドに最適な選択肢のように思えます。

他の目的でフィールドを既に使用している場合は、この目的のためだけに新しいフィールドを作成することを検討してください。

したがって、これを含めると、次schema.xmlの名前のフィールド タイプが導入されstringます。

<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

Solr のデフォルト インストールに含まれている例に従っている場合は、そのようなフィールド タイプがすでに利用可能になっている可能性があります。フィールド定義は次のようになります。

<field name="activityemail" type="string" ... />

省略記号は、フィールドに関連付けられたその他のさまざまなオプションを表します。

Solr を再起動してドキュメントのインデックスを再作成した後、このフィールドは、言及した文字列だけを使用してクエリできます。

from solr import SolrConnection
term = "11000060K2"
solr_conn = SolrConnection()
scoreDocs = solr_conn.si.query(activityemail=term).execute()
print scoreDocs.result.docs
于 2012-11-30T03:30:29.193 に答える