2011-10-09 91 views
0

我想用solr實現自動完成搜索。用戶正在搜索人員的姓名。自動完成由NGrams完成。這是正常工作,所以當我搜索「卡羅」我找到「卡羅琳」。我現在想做的是一個字符映射。用戶應該在搜索中輸入「Karo」來找到「Caroline」。所以「k」將被映射到「c」。當我用下面的配置進行搜索時,通過搜索「Karo」或「Karoline」(「Caro」作品)得到空的結果。Solr與NGrams和MappingCharFilter的自動完成

我已經創建了以下內容的mapping.txt:

"k" => "c" 

這裏是我的領域配置:

<fieldType name="string_wildcard" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="/home/martin/mapping.txt"/> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

我希望你能幫助我。謝謝!

回答

1

您正在使用「k」=>「c」,它只會將小寫的k替換爲c。

您需要將小寫過濾器添加到過濾器鏈中,以使其不區分大小寫。

<fieldType name="string_wildcard" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/>  
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="/Users/jayendrapatil/solr/trunk/solr/example/solr/conf/mapping-ISOLatin1Accent.txt"/> 
    </analyzer> 
</fieldType>