为什么在Lucene NOT_ANALYZED文字字段上搜索会返回0结果?

时间:2014-07-01 02:04:10

标签: search lucene lucene.net

当我构建我的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在索引中看到这些值 - 它们肯定是存储的。为什么查询不能用于简单的文字字段?

由于

赖安

1 个答案:

答案 0 :(得分:0)

NOT_ANALYZED表示术语词典不包含对该字段的任何引用,因此不对其进行搜索将产生结果。如果您希望将字段编入索引,我建议您使用KeywordAnalyzer来保持文本为给定但将其编入索引并使其在术语字典中可见。另外,作为附注,Field.Index枚举已被弃用,所以我建议你也不要这样做