我有一个包含名称和位置的数据库。我正在使用不区分大小写的USING SOLR搜索名称。但是我找不到任何方法可以做到这一点。例如:我有一个名称列表:
拉吉夫·拉吉夫·拉吉·拉吉
当我搜索cname:raj*我得到以下 rajeev raj
我该怎么做才能得到 Rajeev 和 Raj。
我有一个包含名称和位置的数据库。我正在使用不区分大小写的USING SOLR搜索名称。但是我找不到任何方法可以做到这一点。例如:我有一个名称列表:
拉吉夫·拉吉夫·拉吉·拉吉
当我搜索cname:raj*我得到以下 rajeev raj
我该怎么做才能得到 Rajeev 和 Raj。
您应该添加一个新的过滤器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>