当使用变音符号进行搜索时,Solr发现没有变音符号的单词,而不是相反

时间:2013-01-12 12:33:29

标签: solr

对于我的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>

有没有办法让它兼顾两种方式?

2 个答案:

答案 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来获取令牌并使用小写作为过滤器。

另外,请记住分析器中的执行顺序如下,不管您的顺序如何: -

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