Solr重音删除

use*_*322 1 search solr non-ascii-characters

我已阅读有关如何在索引/查询时删除重音的各种线程.我提出的当前字段类型如下所示:

<fieldType name="text_general" class="solr.TextField">     
    <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>     
</fieldType>
Run Code Online (Sandbox Code Playgroud)

在向索引添加了几个测试信息之后,我已经检查过了 http://localhost:8080/solr/test_core/admin/luke?fl=title

生成了哪种令牌.例如,像"拜仁慕尼黑"这样的标题被标记为:

<int name="bayern">1</int>
<int name="m">1</int>
<int name="nchen">1</int>
Run Code Online (Sandbox Code Playgroud)

因此,它不是用ascii pendant替换字符,而是被解释为分隔符?!有这样的指数导致我既不能搜索"münchen"也不能搜索m?nchen.

知道怎么解决?提前致谢.

JHS*_*JHS 7

问题是你在申请StandardTokenizerFactory之前申请ASCIIFoldingFilterFactory.相反,你应该首先使用MappingCharFilterFactory字符过滤器工厂和StandardTokenizerFactory.

根据Solr Reference指南 StandardTokenizerFactory支持<ALPHANUM>, <NUM>, <SOUTHEAST_ASIAN>, <IDEOGRAPHIC>, and <HIRAGANA>.因此,当您使用StandardTokenizerFactory变音符号进行标记时,字符会丢失,之后您ASCIIFoldingFilterFactory将无法使用.

fieldType如果你想去,你应该像下面一样StandardTokenizerFactory.

<fieldType name="text_general" class="solr.TextField">     
    <analyzer>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>     
</fieldType>
Run Code Online (Sandbox Code Playgroud)

mapping-ISOLatin1Accent.txt应该有这种"特殊"字符映射.在Solr中,此文件默认预先填充.对于例如ü -> ue,ä -> ae等等.