【发布时间】:2018-07-30 09:28:36
【问题描述】:
我正在使用 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 SuggestEan^8
【问题讨论】:
-
有什么理由不能在调用 Solr 的控制器中处理它?由于它是完全匹配,因此进行比较而不显示更多条目应该最多几行代码。
-
我想充分利用 Solr 配置,因此我不必进一步处理结果。但到目前为止,这似乎确实是唯一的解决方案。谢谢。
-
您也可以进行两个查询 - 因为完全匹配是针对一个只会返回单个文档的字段,所以在任何情况下都应该非常快。
-
MatsLindh 请将此添加为答案,以便我关闭问题。这确实是最好的方法,因为完全匹配查询非常快。