对于我的solr实现,我希望查询返回带有和不带变音符的单词,无论你是否使用变音符进行搜索。
举个例子
搜索词是“çest” - Solr返回:' cest ','çest'和'çestca< / em>的” 搜索词是“ cest ” - Solr返回:' cest ','çest'和'çestca “
当前第一部作品。当我搜索“çest”时,它返回cest和çest。但是,当我搜索“cest”时,它只返回'cest'
这就是我在架构中的样子:
<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\W+" replacement="-"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
有没有办法让它兼顾两种方式?
答案 0 :(得分:1)
如果您想要任何一场比赛,则不需要solr.PatternReplaceCharFilterFactory
。
这将在将特殊字符传递给ASCII过滤器之前将其删除。
您可以使用: -
<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
您还可以使用WhiteSpace Tokenizer来获取令牌并使用小写作为过滤器。
另外,请记住分析器中的执行顺序如下,不管您的顺序如何: -
答案 1 :(得分:0)
建议的答案对我来说没有用,相反我必须使用它:
<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
</fieldType>
您还可以使用随solr版本提供的映射文件,或使用下面链接的映射文件 https://github.com/lmjabreu/solr-conftemplate/blob/master/mapping-ISOLatin1Accent.txt