我想用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>
我希望你能帮助我。谢谢!
答案 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>