问题描述
假设我有一个包含大约 17,000 个药物名称的列表,我希望能够搜索这些名称:[对乙酰氨基酚、布洛芬、Xanax、percocet 等]。我希望能够在用户输入时从列表中推荐药物。
然而,正如我所拥有的,当我输入“ibup”时,建议是
“I-123 MIBG”
“我123迷你”
“I-131 迷你”
“I-Prin (Oral)”等......
我希望“布洛芬”成为建议列表中的一个(如果不是最重要的)结果。我如何定义 field
和 fieldType
以使其与建议者配合良好。
每个药物名称的字段类型是内置的默认text_general:
<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>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)