我正在使用此标记,以便当我输入“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的结果。任何指针都将受到高度赞赏。
感谢。
答案 0 :(得分:1)
这不是人们使用NGram的通常方式。通常情况下,当你寻找'apple'或'dell'时,你想要'appledell',而不是相反(如果我理解正确你想要的话)。
在这种情况下,您只需要将EdgeNGramFilterFactory应用于查询分析器(通常的方法是仅应用于索引分析器)。但是你会有其他的副作用,因为'appledell'会在许多令牌中被分解,比如'ap''app',所以'application'也会匹配。例如。