我在使用Solr的建议组件时遇到问题,我想要使用的实现类是AnalyzingInfixLookupFactory,我正在使用它来获取基于中缀的建议而不仅仅是前缀。我还需要Solr将搜索词视为一个标记。但问题是Solr总是根据前缀而不是中缀返回建议。
我在solrconfig.xml中的Suggest组件:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
<str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
<str name="field">movie_name</str>
<str name="weightField">movie_meter</str>
<str name="buildOnCommit">true</str>
<str name="suggestAnalyzerFieldType">text_general</str>
</lst>
schema.xml中的text_general:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:4)
我知道这是很久以前的问题,但无论如何,这是我的答案。
在上面的solrconfig.xml中使用以下分析器字段类型:
<str name="suggestAnalyzerFieldType">text</str>
<str name="queryAnalyzerFieldType">text_suggest</str>
然后在schema.xml中:
<fieldtype name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
<fieldtype name="text_suggest" class="solr.TextField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
</fieldtype>
答案 1 :(得分:1)
对于Solr版本6.6。
它有点晚了,但对其他人有用。
我想配置搜索字段&#34; product_name&#34;。
的 solrconfig.xml中强>
#import "ClassB.h"
<强>管理型模式强>
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">productSuggester</str>
<!--<str name="lookupImpl">FuzzyLookupFactory</str> -->
<str name="lookupImpl">AnalyzingInfixLookupFactory</str> -->
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">product_name</str>
<!-- <str name="weightField">price</str> -->
<str name="buildOnCommit">true</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="buildOnStartup">true</str>
<str name="highlight">false</str>
</lst>
</searchComponent>