2

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

有没有办法让它双向工作?

4

2 回答 2

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 来获取令牌并将小写字母用作过滤器。

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

  • 字符过滤器
  • 分词器
  • 过滤器
于 2013-01-12T13:29:50.883 回答
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

于 2017-02-20T18:52:52.420 回答