0

我正在使用这个标签,因此当我输入“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的结果。任何指针将不胜感激。

谢谢。

4

1 回答 1

1

这不是人们使用 NGram 的常用方式。通常,当您查找“apple”或“dell”时,您希望找到“appledell”,而不是相反(如果我理解正确,这就是您想要的)。

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

于 2012-06-15T12:25:13.250 回答