0

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

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

此查询旨在搜索名称前 3 个字符fis和地址前 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

我怎样才能做到这一点?

4

2 回答 2

1

使用 KeywordTokenizerFactory 创建一个文本字段。这个分词器没有实际的分词,所以整个输入字符串被保存为一个单一的词。所以它就像有一个小写字符串字段:

<fieldType name="lowerCaseString" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
       <tokenizer class="solr.KeywordTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
</fieldType> 
于 2013-11-01T10:10:16.763 回答
0

一种简单的解决方案是将字段的类型保留为字符串,但在索引数据时将值小写。然后也将来自客户端的查询小写。

于 2013-11-01T04:56:07.077 回答