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