Lucene不使用大写字符

Lucene不使用大写字符,lucene,analyzer,query-parser,Lucene,Analyzer,Query Parser,我已经使用StandardAnalyzer构建了一个索引,在这个索引中有几个字段。例如,假设它具有Id和类型。两者都是未分析的,这意味着您只能按原样搜索它们 我的索引中有几个条目: {Id: "1", Type: "Location"}, {Id: "2", Type: "Group"}, {Id: "3", Type: "Location"} 当我搜索+Id:1或任何其他数字时,我会得到相应的结果(再次使用StandardAnalyzer) 但是,当我搜索+Type:Location或

我已经使用StandardAnalyzer构建了一个索引,在这个索引中有几个字段。例如,假设它具有Id和类型。两者都是未分析的,这意味着您只能按原样搜索它们

我的索引中有几个条目:

 {Id: "1", Type: "Location"},
 {Id: "2", Type: "Group"},
 {Id: "3", Type: "Location"}
当我搜索
+Id:1
或任何其他数字时,我会得到相应的结果(再次使用StandardAnalyzer)

但是,当我搜索
+Type:Location
+Type:Group
时,我没有得到任何结果。奇怪的是,当我启用前导通配符时,
+Type:*ocation
会返回结果<代码>+类型:*位置或其他组合不适用

这让我相信索引器/查询不喜欢大写字符!在索引它们之前,将类型小写为
位置
,我就可以这样搜索它们了

如果我将类型字段改为analysis,它几乎可以用于任何搜索(大写/小写等),但我希望按原样查询类型字段


我完全搞不懂它为什么这么做。有人能解释一下为什么我的索引器不允许我搜索值中有大写字母的未分析字段吗?

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


搜索和索引时始终使用相同的分析器。研究如何使用PerFieldAnalyzer,并将Type字段设置为使用关键字分析器。

我在索引和查询分析器中都使用了StandardAnalyzer,这是奇怪的部分。QueryParser不是通过查看索引本身来确定它是否应该实际使用StandardAnalyzer吗?我理解“未分析”意味着在索引期间跳过分析部分,并且我假设当我查询具有该集合的字段时,它也会这样做。但很明显,事实并非如此;如果没有IndexReader,查询者怎么可能知道索引的任何信息呢?非常正确。。。如果可能的话,我如何告诉我的查询解析器一个字段没有被分析,应该这样处理?更好的是,我如何告诉QueryParser将某个符号视为TermQuery-基本上按原样搜索?我尝试过使用“[Location]”,因为这似乎是最合理的,但它不理解。您是否尝试过使用PerFieldAnalyzer和使用KeywordAnalyzer作为类型字段?