Lucene.net返回文档中的所有字段

时间:2012-11-27 08:46:10

标签: lucene lucene.net

我在lucene.Net中存储数据 我添加了一个包含多个字段的文档:

var doc = new Document();

doc.Add(new Field("CreationDate", dt, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("FileName", path, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Directory", dtpath, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("Text", text.ToString(), Field.Store.YES, Field.Index.ANALYZED));
...
writer.AddDocument(doc);

我想浏览所有项目,并为每个文档返回“CreationDate”和“Directory”字段。 但是一个Term只能在1个字段之外:

var termEnum = reader.Terms(new Term(“CreationDate”));

如何让它返回2个字段???

由于 马丁

2 个答案:

答案 0 :(得分:1)

当您遍历搜索结果时,请阅读文档并从中加载值:

int docId = hits[i].doc;  
Document doc = searcher.Doc(docId); 
String creationDate = doc.Get("CreationDate");
String directory = doc.get("Directory");
// ...and so on

答案 1 :(得分:0)

您可以使用以下命令获取包含给定术语的所有文档的枚举:

var termDocEnum = reader.TermDocs(new Term("CreationDate"));

您可以使用该枚举来使用docId:

获取文档
Document doc = searcher.doc(termDocEnum.doc);

这样可以轻松使用Document API来获取您要查找的信息。

注意,正如前面所暗示的那样,这只会获得给定术语具有指定值的文档!如果这是一个问题,你可以为每个相关的参数调用一次TermDocs并根据需要合并这些集合(使用在docId上索引的哈希表,或者某些这样的方法很容易完成),或者调用不带参数的TermDocs,并使用{{ 3}}找到合适的术语(如果需要,还需要手动完成合并)。

从'terms'方法传递的TermEnum没有给你一个docId(你必须使用termDocs方法来获取enum中的每个术语,我相信。)