EdgeNGramFilterFactory无效

时间:2012-06-15 10:28:37

标签: solr

我正在使用此标记,以便当我输入“appledell”(不带引号)作为搜索关键字时,它应该为Apple和Dell提供结果。

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.StandardFilterFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="de.hybris.platform.solrfacetsearch.ysolr.synonyms.HybrisSynonymFilterFactory" ignoreCase="true" synonyms="en" coreName="${solr.core.name}"/>
                <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1" generateNumberParts="1" catenateWords="1"
                    catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" />
                <filter class="de.hybris.platform.solrfacetsearch.ysolr.stopwords.HybrisStopWordsFilterFactory" ignoreCase="true" lang="en" coreName="${solr.core.name}"/>
                <filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" />
                <filter class="solr.ASCIIFoldingFilterFactory" />
                <!-- <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>

当我使用Apple n Dell分别搜索时,它运行正常。但它没有给出appledell的结果。任何指针都将受到高度赞赏。

感谢。

1 个答案:

答案 0 :(得分:1)

这不是人们使用NGram的通常方式。通常情况下,当你寻找'apple'或'dell'时,你想要'appledell',而不是相反(如果我理解正确你想要的话)。

在这种情况下,您只需要将EdgeNGramFilterFactory应用于查询分析器(通常的方法是仅应用于索引分析器)。但是你会有其他的副作用,因为'appledell'会在许多令牌中被分解,比如'ap''app',所以'application'也会匹配。例如。