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;
}

最初は、index フォルダーは空です。Lucene がテキスト ファイル (それぞれ約 10MB、すべて約 600MB) のインデックス作成を終了するたびに出力term_numberします。index_MB_sizeしたがって、約60ペアの結果が得られます。しかし、悲しいことに、60 ペアの 2 つの変数が常に 0 であることがわかりました。インデックス セグメントが終了したときにのみ、統計情報はゼロ以外の結果を示します。

これは、CheckIndex クラスが正しく機能するのは、インデックス作成が完了した後であるためだと思います。しかし、私はチェックしていません。

どうすればリアルタイムで情報を取得できますか? さらに、CheckIndex プロセスは非常に時間がかかります。情報の 2 つの側面 (インデックス サイズとターム数) を取得するための他の良い方法はありますか?

4

1 に答える 1

0

Lucene In Action 2nd Editionという本の中で、ついに答えを見つけました。

これは、 がによってメソッドが呼び出された後にのみ、IndexReaderCheckIndexがインデックスの変更を確認できるためです。CommitはFlushとは大きく異なります。なぜなら、flushはバッファリングされたすべてのデータをディスクにフラッシュするだけであり、一方、flushは最初にフラッシュを実行してから、すべての変更を に表示できるようにするためです。commit()IndexWriterCommitIndexReader

于 2012-12-20T13:47:08.507 に答える