当我构建我的Lucene索引(.NET)时,我添加了一些标识符字段为NOT_ANALYZED - 即它们将被存储"按原样#34;即语言只是" EN"或" JP"。如果我理解,这是存储密钥的正确方法,而不是自由文本。
doc.Add(new NumericField("id", Field.Store.YES, true).SetIntValue(id));
doc.Add(new Field("language", language, Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
doc.Add(new Field("headline", headline, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
搜索分析的字段返回结果,即
headline:oversight
返回结果,但对NOT_ANALYZED字段的简单查询不会:
language:EN
或者
id:120
id:[120 TO 120]
(我假设id,存储为NumericField本身存储为NOT_ANALYZED)
我可以通过Luke在索引中看到这些值 - 它们肯定是存储的。为什么查询不能用于简单的文字字段?
由于
赖安
答案 0 :(得分:0)
NOT_ANALYZED表示术语词典不包含对该字段的任何引用,因此不对其进行搜索将产生结果。如果您希望将字段编入索引,我建议您使用KeywordAnalyzer
来保持文本为给定但将其编入索引并使其在术语字典中可见。另外,作为附注,Field.Index
枚举已被弃用,所以我建议你也不要这样做