我希望在索引过程中以实时方式获取有关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进程非常耗时,还有其他更好的方法来获取信息的两个方面(索引大小和术语编号)吗?
答案 0 :(得分:0)
我终于在 Lucene In Action第二版 一书中找到了答案。
这是因为IndexReader
和CheckIndex
只能在commit()
调用IndexWriter
方法后才能看到对索引的更改。 提交与 Flush 非常不同,因为 flush 只将所有缓冲的数据刷新到磁盘,而Commit
将执行先刷新,然后对IndexReader
显示所有更改。