2

我已经阅读了有关如何在索引/查询期间删除重音的各种主题。我想出的当前字段类型如下所示:

<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

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

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

因此,它没有用它的 ascii 吊坠替换字符,而是被解释为分隔符?!有了这种索引结果,我既不能搜索“münchen”,也不能搜索 m?nchen。

知道如何解决吗?提前致谢。

4

1 回答 1

9

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

根据Solr 参考指南 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>

应该具有此类“特殊”字符的mapping-ISOLatin1Accent.txt映射。在 Solr 中,默认情况下会预先填充此文件。例如ü -> ue,ä -> ae等。

于 2013-06-18T07:04:06.053 回答