Lucene NOT_ANALYZED不使用大写字符

时间:2016-01-18 15:57:50

标签: lucene analyzer query-parser

我使用StandardAnalyzer构建索引,在这个索引中有几个字段。例如,假设它具有Id和Type。两者都是NON_ANALYZED,这意味着你只能按原样搜索它们。

我的索引中有几个条目:

 {Id: "1", Type: "Location"},
 {Id: "2", Type: "Group"},
 {Id: "3", Type: "Location"}

当我搜索+Id:1或任何其他号码时,我会得到相应的结果(再次使用StandardAnalyzer)。

但是,当我搜索+Type:Location+Type:Group时,我没有得到任何结果。奇怪的是,当我启用前导通配符时,+Type:*ocation会返回结果! +Type:*Location或其他组合没有。

这让我相信索引器/查询不喜欢大写字符!在将类型降级为locationgroup之后将其归类为索引之前,我可以将其搜索为。

如果我将Type-field转为ANALYZED,它几乎适用于任何搜索(大写/小写等),但我想按原样查询Type-field。

我完全不知道为什么要这样做。任何人都可以向我解释为什么我的索引器不能让我搜索有价值资本的NON_ANALYZED字段吗?

1 个答案:

答案 0 :(得分:2)

在解析查询字符串(+Type:Location)时是否使用StandardAnalyzer? StandardAnalyzer将对所有术语进行小写,因此您实际上正在使用+Type:location进行搜索。

搜索和索引时始终使用相同的分析器。查看使用PerFieldAnalyzer并将Type字段设置为使用KeywordAnalyzer。