#indexing #solr #search-engine #autosuggest #search-suggestion
Вопрос:
Допустим, у меня есть список из примерно 17 000 наименований лекарств, которые я хочу иметь возможность искать: [Ацетаминофен, Ибупрофен, Ксанакс, перкоцет и т. Д.]. Я хочу иметь возможность предлагать лекарства из списка по мере ввода пользователем.
Однако, как у меня есть, когда я набираю «ibup», предложения «I-123 MIBG», «I 123 Mini», «I-131 Mini», » I-Prin (Устный)» и т. Д….. Я бы ожидал, что «Ибупрофен» будет одним из, если не лучшим, результатом в списке предложений. Как мне определить a field
и fieldType
так, чтобы он хорошо работал с суггестором.
Тип поля каждого названия препарата-это текстовый генератор по умолчанию, который встроен в:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Я использую FuzzyLookupFactory, чтобы предложить названия лекарств из списка. Мой компонент поиска и обработчик запросов выглядят следующим образом:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="storeDir">fuzzyDirectory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">drugName</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnStartup">false</str>
<str name="buildOnCommit">false</str>
</lst>
</searchComponent>
<requestHandler name="/suggesthandler" 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>
Комментарии:
1. Алло, как ты звонишь суггестендлеру? Я построил ядро со всей информацией, которую вы здесь разместили, и когда я звоню: /solr/stack_o/suggesthandler?indent=onamp;q=ibupamp;wt=json, я получаю: 1 предложение: Ибупрофен. предложения: [ { термин: «Ибупрофен», вес: 0, полезная нагрузка: «» } ]