2011-10-09 62 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>