SOLR搜索查询区分大小写

时间:2012-07-17 08:55:31

标签: java apache solr

我正在尝试使用SOLR搜索一些具有FirstName的记录;

abcd
Abcd
abcD
ABcd
abCd
abCD

现在我正在尝试使用通配符支持进行搜索。 我需要了解搜索在区分大小写方面的确切作用。

e.g。如果我将FirstName参数作为ab * Vs Ab *传递,将返回哪些记录?

是否有某种方法可以使搜索变得具有案例敏感性或不区分大小写?

请帮忙。谢谢。

4 个答案:

答案 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)。

相关问题