#solr #solrcloud #search-suggestion
#solr #solrcloud #поиск-предложение
Вопрос:
Мое требование — предоставлять пользователям автоматические предложения по именам активов в соответствии с их проектом. Я пробовал использовать AnalyzingInfixLookupFactory and BlendedInfixLookupFactory
, поскольку это единственные, которые поддерживают фильтрацию контекста. Но результаты предложения не возвращаются. Ниже приведена выдержка из solrconfig.xml
:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">assetname_str</str>
<str name="indexPath">/home/suggest_index</str>
<str name="contextField">projectid</str>
<str name="weightField">weight</str>
<str name="suggestAnalyzerFieldType">string</str>
<str name="buildOnStartup">false</str>
<str name="buildOnCommit">false</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
<str name="suggest.dictionary">mySuggester</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
Однако, если я попытаюсь использовать FuzzyLookupFactory
как поисковый Impl, то результаты предложения будут возвращены, как и ожидалось.(но проблема Fuzzylookupfactory
в том, что не поддерживает фильтрацию контекста)
используемый URL-адрес: http://ipaddress:port/solr/collection_name/suggest?suggest=trueamp;suggest.build=trueamp;suggest.dictionary=mySuggesteramp;wt=jsonamp;suggest.q=Comamp;suggest.cfq= 1234
Ответ №1:
(Я знаю, что это старая проблема, но на случай, если другие столкнутся с ней с той же проблемой …)
Я потратил пару дней на то, чтобы иметь дело с теми же пустыми результатами. Вы не говорите, какой тип поля вы используете в качестве материала для предложений. У вас suggestAnalyzerFieldType
установлено значение string
.
По умолчанию string
это тип поля без анализа, многие готовые schema.xml примеры. Ключевая концепция, на которую лишь смутно намекается в документе Suggester руководства Solr, заключается в том, что lookupImpls нравится AnalyzingInfixLookupFactory
и BlendedInfixLookupFactory
может принимать a suggestAnalyzerFieldType
, который не является типом поля, из которого вы генерируете предложения, а скорее нуждается в типе, который содержит соответствующие элементы анализатора, например, solr.WhiteSpaceTokenizer
необходимые для предложений.
В моем случае я пытался предложить из многозначного строкового поля — я хотел, чтобы поле не имело токенизации. Но пока я не изменил suggestAnalyzerFieldType
from string
на text_ws
(тип поля, для которого используется только анализатор sole.WhiteSpaceTokenizer
, я получал пустые результаты.
Как бы то ни было, если вы используете многозначное строковое поле для предложений и многие документы, содержащие одинаковые строковые значения в этом поле, то BlendedInfixLookupFactory
, похоже, результат будет лучше без повторяющихся предложений.