Solr在使用变音符号进行搜索时会找到不带变音符号的单词,而不是相反

Solr在使用变音符号进行搜索时会找到不带变音符号的单词,而不是相反,solr,Solr,对于我的solr实现,我希望查询返回带和不带变音符号的单词,无论搜索时使用或不使用变音符号 举例 搜索词是“çest”-Solr返回:“cest”、“çest”和“çest ca” 搜索词是“cest”——Solr返回:“cest”、“çest”和“çest ca” 目前,第一个工作。当我搜索“çest”时,它同时返回cest和çest。但是,当我搜索“cest”时,它只返回“cest” 这是它在我的模式中的外观: <fieldType name="text_special_search"

对于我的solr实现,我希望查询返回带和不带变音符号的单词,无论搜索时使用或不使用变音符号

举例

搜索词是“çest”-Solr返回:“cest”、“çest”和“çest ca” 搜索词是“cest”——Solr返回:“cest”、“çest”和“çest ca”

目前,第一个工作。当我搜索“ç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>


有没有一种方法可以让它同时工作?

如果您想要任何一种匹配,您不需要
solr.PatternReplaceCharFilterFactory
。 这将在将特殊字符传递到ASCII筛选器之前删除这些字符

您可以使用:-

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
    </analyzer>
</fieldType>

您还可以使用空白标记器来拥有标记,并使用小写作为过滤器

此外,请记住分析器中的执行顺序如下所示,请注意您的执行顺序:-

  • 炭过滤器
  • 标记器
  • 过滤器

推荐的答案对我来说从来都不起作用,相反,我不得不使用这个:

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