我想获取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
}
}
这是正确的方式还是有其他可能的方式?感谢
答案 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)
这是正确的方法。在优化索引之前,不会删除文档。
或者,如果您有一个匹配所有文档的*:*
之类的查询,则可以改为运行该查询。查询方法可能会稍慢,但可能更标准。