我正在尝试使用 Solr 的建议器组件实现搜索的自动完成功能。我想提出跨多个领域的建议。我有 2 个字段taxonomy
,tag
我想在建议中提供这些字段。例如,如果搜索查询是,neck
那么它应该返回:
necklace
neckalce sets
pearl necklace
diamond necklace
pearl necklace sets
diamond necklace sets
wherenecklace
是分类,pearl
并且diamond
是标签。
以下是我的 schema.xml:
<field name="suggestion" type="text_auto" indexed="true" stored="false" multiValued="false" />
<copyField source="taxonomy_name" dest="suggestion"/>
<copyField source="tag" dest="suggestion">
<fieldType name="text_auto" class="solr.TextField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
和我的 solrconfig.xml:
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">suggestion</str> <!-- the indexed field to derive suggestions from -->
<float name="threshold">0.005</float>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
但这会返回:
necklace
necklace sets
我怎样才能解决这个问题。我也尝试过使用:
<fieldType name="text_auto" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
但这仅返回necklace sets
。