我已经阅读了关于如何在索引/查询时间删除口音的各种线程。我现在使用的字段类型如下所示:
<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
<int name="bayern">1</int>
<int name="m">1</int>
<int name="nchen">1</int>
因此,它被解释为分隔符,而不是用它的ascii附件替换字符?!使用这种索引的结果是,我既不能搜索"m
有办法修复吗?
问题是您在应用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
等