Solr重音去除



我已经阅读了关于如何在索引/查询时间删除口音的各种线程。我现在使用的字段类型如下所示:

<fieldType name="text_general" class="solr.TextField">     
    <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>     
</fieldType>

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

已生成的令牌类型。例如,像"Bayern m nchen"这样的标题被标记为:

<int name="bayern">1</int>
<int name="m">1</int>
<int name="nchen">1</int>

因此,它被解释为分隔符,而不是用它的ascii附件替换字符?!使用这种索引的结果是,我既不能搜索"m nchen",也不能搜索m?nchen。

有办法修复吗?

问题是您在应用ASCIIFoldingFilterFactory之前应用StandardTokenizerFactory。相反,您应该首先使用MappingCharFilterFactory字符过滤器工厂,然后使用StandardTokenizerFactory

根据Solr参考指南StandardTokenizerFactory支持<ALPHANUM>, <NUM>, <SOUTHEAST_ASIAN>, <IDEOGRAPHIC>, and <HIRAGANA>。因此,当您使用StandardTokenizerFactory进行标记时,变异体字符将丢失,而ASCIIFoldingFilterFactory在此之后就没有用处了。

如果你想选择StandardTokenizerFactory,你的fieldType应该像下面这样。

<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>

mapping-ISOLatin1Accent.txt应该有这些"特殊"字符的映射。在Solr中,这个文件默认情况下是预先填充的。例如ü -> ueä -> ae

相关内容

  • 没有找到相关文章

最新更新