我的scheme.xlm看起来像这样:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- The searched field -->
<field name="product_name" type="text" indexed="true" stored="true"/>
这应该用小写索引字段,并将搜索查询转换为小写。
我想找的数据是:“诺基亚Lumia 610”
当我搜索“诺基亚”时,我得到了预期的结果但是 仅搜索“诺基亚”(大写字母N)时,没有任何结果。
以上“analyzer”仅对索引执行小写,但不对搜索查询执行。
这是一个错误吗? 如何强制SOLR索引和搜索查询为小写?
答案 0 :(得分:3)
搜索查询的转换还取决于您使用的查询类型和分析器。例如,如果您向select分析器发送请求,则上述内容不会将您的搜索查询转换为小写。如果您要发送请求: -
http://url/solr/select?q=Nokia
然后上面的内容将不会转换为小写,因为您的字段类型定义中不存在选择分析器。您必须按如下方式修改代码: -
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="select">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
如果上述方法不起作用,请发送您要发送的请求以及向请求添加debugQuery = true的输出。
答案 1 :(得分:0)
与
一起<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="select">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在schema.xml中。
在head.vm中更改返回$(&#34;#q&#34;)。val(); 至 返回$(&#34; #q&#34;)。val()。toLowerCase(); 用于InCaseSensitive自动完成功能。 因此,如果您使用大写字母进行搜索,您就可以获得结果。