我正在使用solr 7.5对类别中的“ / suggester”做一些建议。用于带有solr集成的自动完成功能。
索引项目:
预期行为
搜索:“ roo”->结果:“屋顶”和“屋顶面板”
搜索“窗格”->结果:“屋顶面板”和“夹心面板”
问题
我尝试了使用不同标记器的几种解决方案,但均未成功。
StandardTokenizer返回单个单词
KeywordTokenizer向我返回了完整的短语,但是如果我搜索“面板”->没有建议的单词,就会出现问题。会期望“夹心板”和“屋顶板”
如果我搜索“屋顶面板”,ShingleFilterFactory给我奇怪的结果->它返回“屋顶面板” /“屋顶屋顶面板” /“屋顶夹心面板”
最新配置
Solr文件:
"autosuggest_en":["Roof Panels",
"Sandwich Panels",
"Roof Panels",
"Sandwich Panels"],
"spellcheck_en":["Roof Panels",
"Sandwich Panels",
"Roof Panels",
"Sandwich Panels"],
solrconfig.xml
<searchComponent name="suggest" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text_spell</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="suggestAnalyzerFieldType">text_spell</str>
<str name="field">autosuggest</str>
<str name="buildOnCommit">true</str>
<str name="buildOnOptimize">true</str>
<str name="accuracy">0.35</str>
</lst>
</searchComponent>
schema.xml
<fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="10"
outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=" " fillerToken="_"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="10"
outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=" " fillerToken="_"/>
</analyzer>
</fieldType>
上面的解决方案使我有以下行为。 搜索:“屋顶”->结果:“屋顶”和“屋顶面板” =很好
搜索:“屋顶窗格”->结果:“屋顶面板”和“屋顶屋顶面板” =不好。不知道为什么它会重复两次“屋顶”
是否有针对预期行为的适当解决方案的建议?
谢谢!
最诚挚的问候
答案 0 :(得分:0)
要检查问题,可以执行以下步骤:
您应该查看您的synonyms.txt
,是否有任何内容见解?如果是,请禁用该文件进行测试。
在solr管理员页面上使用analysis
功能来了解solr如何处理搜索字词的处理