Lucene:如何在索引编制过程中获取实时索引信息? (索引大小和术语计数)

时间:2012-12-20 10:37:58

标签: java lucene

我希望在索引过程中以实时方式获取有关Lucene索引的信息。所以我在我的代码中使用CheckIndex类,如下所示:

CheckIndex.Status indexStatus = checkIndex.checkIndex();
Iterator<CheckIndex.Status.SegmentInfoStatus> iterator = indexStatus.segmentInfos.iterator();
CheckIndex.Status.SegmentInfoStatus temp = null;
while(iterator.hasNext()) {
    temp = iterator.next();
    term_number += temp.termIndexStatus.termCount;
    index_MB_size += temp.sizeMB;
}

首先,索引文件夹为空。每当Lucene完成索引文本文件(每个大约10MB,全部大约600MB)时,我输出term_numberindex_MB_size。所以我得到了大约60对结果。但我悲哀地发现60对的2个变量始终为0。只有当索引段结束时,统计信息将显示一个非零的结果。

我想这是因为CheckIndex类只能在索引完成后才能正常工作。但我没有检查过。

如何以实时方式获取信息?另外,CheckIndex进程非常耗时,还有其他更好的方法来获取信息的两个方面(索引大小和术语编号)吗?

1 个答案:

答案 0 :(得分:0)

我终于在 Lucene In Action第二版 一书中找到了答案。

这是因为IndexReaderCheckIndex只能在commit()调用IndexWriter方法后才能看到对索引的更改。 提交 Flush 非常不同,因为 flush 只将所有缓冲的数据刷新到磁盘,而Commit将执行先刷新,然后对IndexReader显示所有更改。