在我的solr架构文件中,我有一个使用EdgeNGramFilterFactory的默认搜索字段
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" />
Run Code Online (Sandbox Code Playgroud)
假设我的搜索查询是
tes
Run Code Online (Sandbox Code Playgroud)
所以我得到了这样的结果:
tess
test
tesla
...
Run Code Online (Sandbox Code Playgroud)
如果我搜索
test
Run Code Online (Sandbox Code Playgroud)
我得到的结果就像
test
tess
tesla
...
Run Code Online (Sandbox Code Playgroud)
没关系,因为我使用EdgeNGramFilterFactory和minGramSize = 3,但我想要以下内容:
当我搜索长度超过3个字符的字符串(例如测试)时,我希望solr忽略包含3个字符的所有术语(EdgeNGramFilterFactory).当我搜索"测试"时,我不想得到像"tess"或"tesla"这样的结果.我不会得到以测试(4个字符)开头的结果
test
test for
test-drive
...
Run Code Online (Sandbox Code Playgroud)
是否可以在solr中配置?
您可以仅在字段的索引分析器中配置EdgeNGram过滤器; 对于查询分析器,仍然使用任何EdgeNGram进行常规标记化.因此,当您搜索"test"时,将仅返回前缀为"test"的结果.
config例如(不要为查询分析器定义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>
Run Code Online (Sandbox Code Playgroud)