Lucene NOT_ANALYZED 不支持大写字符

Lucene NOT_ANALYZED not working with uppercase characters

我使用 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 会产生 return 结果! +Type:*Location 或其他组合不。

这让我相信 indexer/query 不喜欢大写字符!在对它们进行索引之前将类型小写为 locationgroup 之后,我可以这样搜索它们。

如果我将 Type-field 设置为 ANALYZED,它几乎可以用于任何搜索(uppercase/lowercase,等等),但我想按原样查询 Type-field。

我完全不明白为什么要这样做。谁能向我解释为什么我的索引器不允许我搜索 NON_ANALYZED 具有大写值的字段?

您在解析查询字符串 (+Type:Location) 时是否使用 StandardAnalyzer? StandardAnalyzer 将 lower-case 所有术语,因此您实际上是在使用 +Type:location.

进行搜索

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