Как сделать Sunburnt Query на точный срок

Пытаюсь найти именно "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"

Пожалуйста, скажите мне, что я делаю не так.

1 ответ

Как вы можете достичь этого, будет зависеть от конфигурации вашей схемы 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
Другие вопросы по тегам