Удаляемые файлы Lucene заблокированы

#java #lucene #indexing #hibernate-search

#java #lucene #индексирование #переход в спящий режим-поиск

Вопрос:

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

но я считаю, что есть какой-то способ решить эту проблему. В любом случае индекс займет все свободное место, потому что в любое время он кем-то используется..