Анализ реализации infixlookupfactory в Solr Suggestor не возвращает результаты предложения

#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 , похоже, результат будет лучше без повторяющихся предложений.