首页 文章

使用EdgeNGramFilterFactory在Solr中搜索并搜索查询的最小长度

提问于
浏览
5

在我的solr模式文件中,我有一个使用EdgeNGramFilterFactory的默认搜索字段

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" />

假设我的搜索查询是

tes

所以我得到这样的结果:

tess
test
tesla
...

如果我搜索

test

我得到的结果如

test
tess
tesla
...

没关系,因为我使用EdgeNGramFilterFactory和minGramSize = 3 but 我想要以下内容:

当我搜索长度超过3个字符的字符串(例如测试)时,我希望solr忽略包含3个字符的所有术语(EdgeNGramFilterFactory) . 当我搜索“测试”时,我不想得到像“tess”或“tesla”这样的结果 . 我不会得到以测试(4个字符)开头的结果

test
test for
test-drive
...

是否可以在solr中配置?

1 回答

  • 5

    您可以仅在字段的索引分析器中配置EdgeNGram过滤器;对于查询分析器,仍然可以使用任何EdgeNGram进行常规标记化 . 因此,当您搜索“test”时,将仅返回以精确“test”为前缀的结果 .

    配置例如(不要为查询分析器定义EdgeNGram)

    <fieldType name=...>
        <analyzer type="index">
            ...
            <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" />
        </analyzer>
        <analyzer type="query">
            ...
            <!-- <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> -->
        </analyzer>
    </fieldType>
    

相关问题