迭代Lucene(.Net)索引中所有未删除的文档

时间:2010-12-02 11:54:40

标签: c# lucene lucene.net

我想获取Lucene(.Net 2.4)索引的所有未删除文档的计数,然后读取我所有或一系列这些文档的存储字段。 在阅读Lucene帮助之后我不太确定,IndexReader.NumDocs()是否返回所有文档的计数或仅返回未删除的文档。我可以简单地遍历IndexReader.Document []和/或它是否包含已删除的文档?

如果NumDocs()和Docmuent [] 包含已删除和未删除的文档,我想我必须做这样的事情:

int totalCount = reader.NumDocs();
int totalCountUndeleted = totalCount;
for (int iDoc = 0; iDoc < totalCount; iDoc++)
  if (reader.IsDeleted(iDoc))
    totalCountUndeleted--;

for (int iDoc = 0; iDoc < totalCount; iDoc++)
{
  if (!reader.IsDeleted(iDoc))
  {
     Document doc = reader.Document(iDoc);
     // read fields
  }
}

这是正确的方式还是有其他可能的方式?感谢

2 个答案:

答案 0 :(得分:1)

IndexReader.NumDocs会为您提供一些活动文档。 IndexReader.MaxDoc是索引中最大文档编号的第一个。以下代码将读取索引中的所有活动文档。

int max = reader.MaxDoc();
for (int iDoc = 0; iDoc < max; iDoc++)
{
  if (!reader.IsDeleted(iDoc))
  {
     Document doc = reader.Document(iDoc);
     // read fields
  }
}

答案 1 :(得分:0)

这是正确的方法。在优化索引之前,不会删除文档。

或者,如果您有一个匹配所有文档的*:*之类的查询,则可以改为运行该查询。查询方法可能会稍慢,但可能更标准。