如何在solr查询中忽略区分大小写

时间:2017-01-06 10:51:43

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

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

拉​​杰夫 拉杰夫 拉吉 拉吉

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

我该怎样做才能让拉杰夫和拉吉。

1 个答案:

答案 0 :(得分:4)

您应该添加一个新的过滤器 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>