SOLR-如果找到完全匹配的结果,则删除所有其他结果

时间:2018-07-30 09:28:36

标签: solr match

我正在使用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

2 个答案:

答案 0 :(得分:2)

要么在进行Solr调用的控制器中处理它(直接比较一个完全匹配项就不需要多于==和一个if子句),或者执行两个查询-一个来检索完全匹配,然后进行常规搜索。

如果第一个搜索得到匹配(直接匹配,并且在大多数情况下将是快速索引查找),请不要执行第二个查询。

答案 1 :(得分:1)

您可以创建自定义后过滤器或自定义搜索组件。但是,正如MatsLindh建议的那样,在Solr客户端中执行此操作可能是最简单的。