2012-07-17 98 views
8

我正在尝试使用SOLR搜索一些具有FirstName的记录;SOLR搜索查询大小写敏感度

abcd 
Abcd 
abcD 
ABcd 
abCd 
abCD 

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

例如如果我将FirstName参数作为ab * Vs Ab *传递,那么将返回哪些记录?

是否有某种方法可以使搜索成为区分大小写或不区分大小写?

请帮忙。谢谢。

回答

6

这取决于您如何在schema.xml中定义字段。如果在索引和查询时使用LowerCaseFilterFactory,则所有查询都将不区分大小写。否则,它将区分大小写。

<filter class="solr.LowerCaseTokenizerFactory"/> 
7

您可以在您的模式中配置它。例如:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="query"> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

表示该字段被认为是小写字母用于查询,这会使印象成为不区分大小写的搜索。

+0

作为solr的5的,这将需要一个标记 - chrismarx 2015-10-21 15:22:17

2

默认情况下,值与存储的值完全匹配。如果你想要一个字段不区分大小写,通常的方法是使用一个使用小写字母过滤器的字段类型,使得所有索引内容都是相同的大小写,并且实际上使得搜索大小写不敏感(因为查询值也是小写的)。

的例子内容做这行的“文本”和“text_en”字段类型:

<filter class="solr.LowerCaseFilterFactory"/> 

有不过是几个特定的​​领域,其中lowercasing野生卡查询AUTOMAGIC操作可能造成的麻烦,并MultitermQueryAnalysis was introduced in Solr 3.6 and 4.0 to handle those situations 。如果字段已经缩小,则3.6和4.0应该自动以正确的方式进行通配符搜索。

如果你没有在3.6之前得到正确的行为,我会建议在查询中降低名称(只要你在索引时也应用了LowerCaseFilterFactory)。

2

默认定义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"/>