Как сделать 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