首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGrams和MappingCharFilter的Solr自动补全

NGrams和MappingCharFilter的Solr自动补全
EN

Stack Overflow用户
提问于 2011-10-10 01:13:29
回答 1查看 543关注 0票数 0

我想用solr实现一个自动补全搜索。用户正在搜索人名。自动补全由NGrams完成。这是正常工作的,所以当我搜索"Caro“时,我找到了”卡罗琳“。我现在想做的是一个字符映射。用户应该通过在搜索中输入"Karo“来找到"Caroline”。因此,"k“将映射到"c”。当我使用下面的配置进行搜索时,我搜索"Karo“或”卡罗琳“("Caro”有效),得到的结果为空。

我已经创建了一个包含以下内容的mapping.txt:

代码语言:javascript
复制
"k" => "c"

以下是我的字段配置:

代码语言:javascript
复制
<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>

我希望你能帮助我。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-10-10 02:50:29

您正在使用"k“=> " c ",它将只替换小写的k to c。

您需要向筛选器链添加小写筛选器,使其不区分大小写。

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7705124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档