2012-06-15 61 views
0

我使用此標籤,因此當我輸入「appledell」(不帶引號)作爲搜索關鍵字時,它應該爲Apple和Dell都提供結果。EdgeNGramFilterFactory無法正常工作

<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

這不是人們使用NGram的常用方式。通常情況下,當你尋找'蘋果'或'戴爾'時,你想找到'appledell',而不是相反(如果我正確理解那是你想要的)。

在這種情況下,您只需將EdgeNGramFilterFactory應用於查詢分析器(通常的方法是僅適用於索引分析器)。但是你會有其他的副作用,因爲'appledell'會像'ap''app'一樣被分解成許多標記,所以'application'也是一個例子。

+0

感謝您的解決方案。我嘗試在查詢分析器中使用** NGramFilterFactory **並在**之後嘗試** PositionFilterFactory **,並且它工作:) – Saurabh

+0

您應該接受答案,然後 – Persimmonium

+0

對不起。現在完成:) – Saurabh