我正在尝试使用SOLR搜索一些具有FirstName的记录;
abcd
Abcd
abcD
ABcd
abCd
abCD
现在我正在尝试使用通配符支持进行搜索。 我需要了解搜索在区分大小写方面的确切作用。
e.g。如果我将FirstName参数作为ab * Vs Ab *传递,将返回哪些记录?
是否有某种方法可以使搜索变得具有案例敏感性或不区分大小写?
请帮忙。谢谢。
答案 0 :(得分:7)
这取决于您如何在schema.xml中定义字段。如果在索引和查询时使用LowerCaseFilterFactory,则所有查询都将不区分大小写。否则它将区分大小写。
<filter class="solr.LowerCaseTokenizerFactory"/>
答案 1 :(得分:7)
您在架构中配置它。例如:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="query">
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
表示对于查询,该字段被视为小写,这使得展示为不区分大小写的搜索。
答案 2 :(得分:3)
solr架构中的默认定义字段的工作方式非常不同。
数据类型'string'
将单词存储为完整字符串。
虽然'text_general'
通常执行标记化和二次处理(例如不区分大小写和整个字符串匹配)。当我们想要匹配句子的一部分时,它对所有场景都非常有用。
如果下面的示例“搜索到句子”被索引到两个字段,我们必须搜索完全搜索到句子以从字符串字段中获取命中,而在text_general的情况下它将返回不同的结果
此处卖家名称将完全匹配搜索字符串,而产品名称将搜索上面的整个句子。
示例:
<field name="seller_name" type="string" indexed="true" stored="true"/>
<field name="product_name" type="text_general" indexed="true" stored="true"/>
答案 3 :(得分:2)
默认情况下,值与存储的值完全匹配。如果您希望字段不区分大小写,通常的方法是使用一个使用小写过滤器的字段类型,使所有索引内容的大小写相同,并且实际上使搜索大小写不敏感(因为查询值也会小写) )。
示例内容针对'text'和'text_en'字段类型执行此操作:
<filter class="solr.LowerCaseFilterFactory"/>
然而,有一些特殊领域可以自动处理外卡查询的小写,可能会导致麻烦,MultitermQueryAnalysis was introduced in Solr 3.6 and 4.0 to handle those situations。如果字段已经小写,则3.6和4.0应该以正确的方式自动进行通配符搜索。
如果你没有在3.6之前得到正确的行为,我建议在使用通配符时,在查询中小写名称(只要你在索引时也应用了LowerCaseFilterFactory)。