我正在使用EgdeNGramFilterFactory来匹配产品EAN代码。
如果找到确切的现有EAN,是否有可能删除所有其他结果? Solr始终首先显示最相关的EAN,我只想显示一个。
我已经阅读了很多关于stackoverflow的答案,但是所有人都提到了boost,这对我来说不是问题。结果得分还可以,就我而言,如果找到完全匹配的结果,则完全删除所有其他结果即可。
当前行为:
EAN列表:12345、12347、12389
搜索:123,结果:12345、12347、12389
搜索:12345,结果:12345、12347、12389
不良行为:
搜索:123,结果:12345、12347、12389
搜索:12345,结果:12345
<field name="ean" type="string" indexed="true" stored="true"/>
<field name="SuggestEan" type="text_suggest_edge_ngram_single" indexed="true" stored="true"/>
<copyField source="ean" dest="SuggestEan" maxChars="30000"/>
<fieldType name="text_suggest_edge_ngram_single" class="solr.TextField">
<analyzer>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\W+" replacement=""/>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="3"/>
</analyzer>
</fieldType>
QF: ean ^ 10 RecommendationEan ^ 8
答案 0 :(得分:2)
要么在进行Solr调用的控制器中处理它(直接比较一个完全匹配项就不需要多于==
和一个if子句),或者执行两个查询-一个来检索完全匹配,然后进行常规搜索。
如果第一个搜索得到匹配(直接匹配,并且在大多数情况下将是快速索引查找),请不要执行第二个查询。
答案 1 :(得分:1)
您可以创建自定义后过滤器或自定义搜索组件。但是,正如MatsLindh建议的那样,在Solr客户端中执行此操作可能是最简单的。