2

我想在索引过程中实时获取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_number我都会输出。index_MB_size所以我得到了大约 60 对结果。但是我很伤心地发现60对中的2个变量始终为0。只有当索引段结束时,统计信息才会显示非零结果。

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

如何实时获取信息?另外,CheckIndex这个过程真的很耗时,有没有其他更好的方法来获取这两个方面的信息(索引大小和词条数)?

4

1 回答 1

0

我终于在Lucene In Action 2nd Edition一书中找到了答案。

这是因为只有在方法被调用IndexReaderCheckIndex才能看到索引的变化。Commit与Flush非常不同,因为flush只会将所有缓冲的数据刷新到磁盘,而会先刷新,然后使所有更改对.commit()IndexWriterCommitIndexReader

于 2012-12-20T13:47:08.507 回答