Я использую для переиндексации 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();
Но после нескольких переиндексаций размер индекса действительно действительно огромен. Любое предложение, как я могу решить эту проблему.
Lucene говорит:
Это нормальное поведение в Windows
когда у вас есть читатели
(IndexReaders или IndexSearchers) открыть
по отношению к индексу, который вы оптимизируете.
Lucene пытается удалить старые сегменты
файлы, как только они были объединены
(Оптимизировано). Тем не менее, потому что Windows
не позволяет удалять файлы, которые
открыт для чтения, Лусен ловит
IOException удаление этих файлов и
а затем записывает эти ожидающие
удаляемые файлы в «удаляемые»
файл. На следующих сегментах сливаются,
что происходит с явным optimize ()
или close (), а также всякий раз, когда
IndexWriter сбрасывает свои внутренние
RAMDirectory на диск (каждый
IndexWriter.DEFAULT_MAX_BUFFERED_DOCS
(по умолчанию 10) addDocuments), Lucene
попробую еще раз удалить эти файлы
(и дополнительные) и любые
все равно неудача будет переписана на
удаляемый файл.
но я верю, что есть способ решить эту проблему. В любом случае индекс будет занимать все свободное пространство, потому что в любое время он кем-то используется ..