使用NGrams和MappingCharFilter的Solr自动完成

使用NGrams和MappingCharFilter的Solr自动完成,solr,Solr,我想用solr实现自动完成搜索。用户正在搜索人名。自动完成由NGrams完成。这工作正常,所以当我搜索“Caro”时,我会找到“Caroline”。我现在要做的是一个字符映射。用户应通过在搜索中输入“Karo”来查找“Caroline”。所以“k”将被映射到“c”。当我使用下面的配置进行搜索时,我通过搜索“Karo”或“Karoline”(“Caro”起作用)得到一个空结果 我创建了一个mapping.txt,其中包含以下内容: "k" => "c" 以下是我的字段配置: <fie

我想用solr实现自动完成搜索。用户正在搜索人名。自动完成由NGrams完成。这工作正常,所以当我搜索“Caro”时,我会找到“Caroline”。我现在要做的是一个字符映射。用户应通过在搜索中输入“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>

我希望你能帮助我。谢谢

您使用的是“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>