使用NGrams和MappingCharFilter进行Solr自动完成

时间:2011-10-09 17:13:29

标签: solr

我想用solr实现自动完成搜索。用户正在搜索人员的姓名。自动完成由NGrams完成。这工作正常,所以当我搜索“Caro”时,我找到了“Caroline”。我现在要做的是Char Mapping。用户应在搜索中输入“Karo”找到“Caroline”。所以“k”将映射到“c”。当我使用下面的配置搜索时,通过搜索“Karo”或“Karoline”(“Caro”工作)获得空结果。

我创建了一个包含以下内容的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 个答案:

答案 0 :(得分:1)

你正在使用“k”=&gt; “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>