【问题标题】:How to ignore the case sensitivity in solr query如何在 solr 查询中忽略区分大小写
【发布时间】:2017-01-06 10:51:42
【问题描述】:

我有一个包含名称和位置的数据库。我正在搜索使用不区分大小写的名称USING SOLR。但是我找不到任何方法可以做到这一点。 例如: 我有一个名字列表:

拉吉夫 拉杰夫 拉吉 拉杰

当我搜索 cname:raj* 时,我得到以下信息 拉杰夫 拉吉

我该怎么做才能得到 Rajeev 和 Raj。

【问题讨论】:

    标签: solr case-insensitive solr-query-syntax


    【解决方案1】:

    您应该添加一个新过滤器 solr.LowerCaseFilterFactory 将所有内容转换为小写,这应该适用于索引和查询。

    分析器是在索引时预处理输入文本的组件 和/或在搜索时。使用相同或相似很重要 在索引和查询中以兼容的方式处理文本的分析器 时间。例如,如果索引分析器将单词小写,则 查询分析器应该做同样的事情来找到被索引的词。

    https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#Analyzers

    一个例子:
    Schema.xml

    <field name="Name" type="text_general" indexed="true" stored="true"/>
    


    text_general 类型

    <fieldType name="text_general" class="solr.TextField" omitNorms="false" positionIncrementGap="100" multiValued="true">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        tokenizerFactory="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
    </fieldType>
    

    【讨论】:

    • 我所有的字段都是字符串类型。方法是否也适用于字符串类型??
    • @RajeevRajvaidya 您应该将类​​型字符串更改为其他内容。默认情况下,类型字符串不使用小写过滤器
    • @Oyeme,我有一个数据驱动的架构配置。我该如何处理不区分大小写的索引和查询
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多