Вы можете выполнить фрагмент индексации данных lucene по фрагменту.Если вы выполняете полную индексацию данных, выполните индексацию данных первой порции в режиме CREATE IndexWriterConfig.
config.setOpenMode(OpenMode.CREATE);
Для индексации оставшихся фрагментов данных установите для режима IndexWriterConfig значение CREATE_OR_APPEND
config.setOpenMode(OpenMode.CREATE_OR_APPEND);
Это будет выполнять пошаговое индексирование путем добавления текущего набора данных ксуществующий индекс lucene.
Вызовите эти методы в каждой инкрементной индексации / индексации данных фрагмента.
writer.optimize();
writer.commit();
writer.close();
Конфигурация TieredMergePolicy также может быть задана явно только в случае инкрементной индексации, чтобы отразитьудалять, модифицировать или добавлять записи в индекс сразу же при поиске
TieredMergePolicy t = new TieredMergePolicy();
t.setForceMergeDeletesPctAllowed(.01);
config.setMergePolicy(t);
writer.forceMergeDeletes();
writer.commit();
Это способ индексации фрагмента по фрагменту.Так как мы делаем кусок за кусок.Это освободит память в каждом чанке.
Индексирование Lucene может быть, а может и не быть основной причиной проблемы нехватки памяти.Используйте Memory Analyzer tool
, чтобы проверить, какие объекты Java не получают мусор в памяти, вызывающий проблему нехватки памяти.