Solr WildCard EdgeNGramFilterFactory搜索前后搜索

时间:2012-06-21 04:56:14

标签: solr

我正在使用EdgeNGramFilterFactory实现solr通配符搜索。我正在尝试实现前/后搜索。例如,搜索“格式系统”和“系统格式”以返回相同的结果。我已经为正面和背面配置了EdgeNGramFilterFactory,但只有前面的“”格式系统“搜索工作没有回”系统格式“。你可以建议我错过了什么或者我错过了什么吗?

这是我的配置

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" />
                <!-- <filter class="solr.SnowballPorterFilterFactory" language="English" /> -->
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="back" />
            </analyzer>
</fieldType>

1 个答案:

答案 0 :(得分:2)

您提到的示例并不适合,因为它包含术语,当您搜索术语时,您不需要任何通配符。如果你想搜索一个术语部分,比如sys,那么让NGrams看起来是个好主意。我建议你看看你的solr分析页面,看看你的分析仪链的结果。

配置了EdgeNGramFilterFactory

side="front",系统输入将生成以下字词:

sy sys syst syste system

这样您就可以搜索sys或syste并获得结果,即使您最初编入索引的术语是系统。

配置了EdgeNGramFilterFactory

side="back",系统输入将生成以下字词:

em tem stem ystem system

通过这种方式,您可以搜索tem或ystem并获得结果。

如果将它们放在同一个链中,则第二个分析器会处理第一个分析器生成的每个术语。你基本上是从每个前NGram中取回NGrams,这不是你想要的。

最好先澄清您的要求。如果您仍想要前后生成NGrams,您应该在两个不同的字段中进行,然后您可以使用edismax解析器进行搜索。