MassIndexer のインデックスを再作成するために使用します。あるサイトからコードの例を入手しました(場所を思い出せません)。
massIndexe.purgeAllOnStart(true) // true by default, highly recommended
.optimizeAfterPurge(true) // true is default, saves some disk space
.optimizeOnFinish(true) // true by default
.batchSizeToLoadObjects(100)
.threadsForSubsequentFetching(15)
.threadsToLoadObjects(10)
.limitIndexedObjectsTo(1000)
.cacheMode(CacheMode.IGNORE) // defaults to CacheMode.IGNORE
.startAndWait();
しかし、数回再インデックスした後、インデックスのサイズは本当に巨大になりました。これを解決する方法についての提案。
ルセン 言う:
これは、最適化しているインデックスに対してリーダー (IndexReaders または IndexSearchers) も開いている場合は常に、Windows での通常の動作です。Lucene は、マージ (最適化) された古いセグメント ファイルを削除しようとします。ただし、Windows では読み取り用に開いているファイルを削除することは許可されていないため、Lucene はこれらのファイルを削除する IOException をキャッチし、保留中の削除可能なファイルを「削除可能な」ファイルに記録します。次のセグメント マージでは、明示的な optimize() または close() 呼び出しで発生し、また IndexWriter が内部 RAMDirectory をディスクにフラッシュするたびに (すべての IndexWriter.DEFAULT_MAX_BUFFERED_DOCS (デフォルト 10) addDocuments)、Lucene はこれらのファイルの削除を再試行します (および追加のもの)、それでも失敗するものは削除可能なファイルに書き直されます。
しかし、私はこれを解決する方法があると信じています。いずれにせよ、インデックスはいつでも誰かによって使用されているため、すべての空き領域を占有します..