2017-04-06 144 views
0

晚上好,Apache Solr自動搜索(*)

當我搜索單詞「應用程序」它不顯示單詞「蘋果」。但是,如果我搜索「應用程序*」,它會顯示「蘋果」和「應用程序」。我不想在搜索欄中輸入「*」。我如何才能做到這一點,如果我只搜索「應用程序」,它顯示「蘋果」和「應用程序」?

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

我試圖添加<filter class="solr.ReversedWildcardFilterFactory"/> 但它沒有工作。

有人可以幫助我嗎?

我使用Apache Solr 6.4.1

Sry for my bad english。

回答

0

使用EdgeNGramFilterFactory

EdgeNGramFilterFactory:

此濾波器產生給定範圍內尺寸的邊緣的n-gram的令牌。

參數:

  • minGramSize:(整數,缺省爲1)的最小克大小。
  • maxGramSize :(整數,默認值1)最大克大小。

實施例:

如果我們使用minGramSize = 1和maxGramSize = 4然後

在: 「四個分數」
標記生成器到過濾器: 「四」, 「分數」
輸出: 「F」, 「FO」, 「缶」, 「四有」, 「S」, 「SC」, 「上海合作組織」, 「SCOR」

對於你的情況,你可以使用下面的模式:

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="200"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

並將您的fieldType更新爲text_ngram Ex。

<field name="name" type="text_ngram" indexed="true" stored="false" multiValued="true"/> 

注:請不要忘記重新加載內核和重新索引數據

+0

謝謝你,我不知道,我重新索引數據 – Hamso