我正在尝试使用SOLR搜索一些具有FirstName的记录;
abcd
Abcd
abcD
ABcd
abCd
abCD
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用通配符支持进行搜索.我需要了解搜索在区分大小写方面的确切作用.
例如,如果我将FirstName参数作为ab*Vs Ab*传递,将返回哪些记录?
是否有某种方法可以使搜索变得具有案例敏感性或不区分大小写?
请帮忙.谢谢.
这取决于您如何在schema.xml中定义字段.如果在索引和查询时使用LowerCaseFilterFactory,则所有查询都将不区分大小写.否则它将区分大小写.
<filter class="solr.LowerCaseTokenizerFactory"/>
Run Code Online (Sandbox Code Playgroud)
您可以在架构中配置它.例如:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="query">
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
表示该字段被视为查询的小写,这使得印象不区分大小写.
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"/>
Run Code Online (Sandbox Code Playgroud)