【发布时间】:2017-01-06 10:51:42
【问题描述】:
我有一个包含名称和位置的数据库。我正在搜索使用不区分大小写的名称USING SOLR。但是我找不到任何方法可以做到这一点。 例如: 我有一个名字列表:
拉吉夫 拉杰夫 拉吉 拉杰
当我搜索 cname:raj* 时,我得到以下信息 拉杰夫 拉吉
我该怎么做才能得到 Rajeev 和 Raj。
【问题讨论】:
标签: solr case-insensitive solr-query-syntax
我有一个包含名称和位置的数据库。我正在搜索使用不区分大小写的名称USING SOLR。但是我找不到任何方法可以做到这一点。 例如: 我有一个名字列表:
拉吉夫 拉杰夫 拉吉 拉杰
当我搜索 cname:raj* 时,我得到以下信息 拉杰夫 拉吉
我该怎么做才能得到 Rajeev 和 Raj。
【问题讨论】:
标签: solr case-insensitive solr-query-syntax
您应该添加一个新过滤器 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>
【讨论】: