【问题标题】:Lucene.net return all fields in a documentLucene.net 返回文档中的所有字段
【发布时间】:2012-11-27 08:46:09
【问题描述】:

我在 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 个字段???

谢谢 马丁

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用以下方法枚举包含给定术语的所有文档:

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

      您可以使用该枚举通过 docId 获取文档:

      Document doc = searcher.doc(termDocEnum.doc);
      

      这应该很容易使用Document API 来获取您正在寻找的信息。

      注意,如前所述,这只会获取给定术语具有指定值的文档!如果这是一个问题,您可以为每个相关参数调用一次 TermDocs 并根据需要合并集合(使用在 docId 上索引的哈希表或类似的方法很容易完成),或者不带参数调用 TermDocs,并使用 @987654322 @ 找到适当的条款(如果需要,合并将再次需要手动完成)。

      从 'terms' 方法传递的 TermEnum 不会为您提供 docId(我相信,您必须使用 termDocs 方法来获取枚举中的每个术语。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 2021-10-19
        • 2014-02-01
        相关资源
        最近更新 更多