我在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个字段???
由于 马丁
答案 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中的每个术语,我相信。)