如何在solr中进行字符串搜索,允许使用通配符,空白字符,并且不区分大小写?

时间:2013-11-01 02:40:01

标签: solr

我正在尝试对我的solr系统运行以下查询:

((((subtype:place) AND name:fis*) AND addressPostal:98007) AND addressLine1:14320\ 21*)

此查询旨在搜索名称为fis的前3个字符且地址的前8个字符为14320 21的商家。

这不返回任何匹配项。但是,如果我将fis*更改为Fis*,则会返回正确的匹配项。经过进一步调查后,字符串类型似乎区分大小写。

然后我尝试定义我的字段以便它们不区分大小写,允许通配符搜索(或者至少从搜索开始),而不是在空格上中断。不幸的是我失败了。

我到目前为止最接近的是:

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

有了这个,我可以((((subtype:place) AND name:fis*) AND addressPostal:98007) AND addressLine1:14320*)得到正确的匹配,但由于空间的原因,我无法完成地址搜索的全部8个字符(因为大多数地址在第一个空格之前只有几位数字) ,这是一个重大问题。)

addressLine1搜索也需要不区分大小写,因为我需要st == ST == St

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

使用KeywordTokenizerFactory创建一个文本字段。此标记生成器没有实际的标记,因此整个输入字符串将保留为单个标记。所以它就像是一个小写的字符串字段:

<fieldType name="lowerCaseString" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
       <tokenizer class="solr.KeywordTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
</fieldType> 

答案 1 :(得分:0)

一个简单的解决方案是将字段的类型保持为字符串,但在索引数据时将值设置为小写。然后从客户端小写查询。