Что делает метод оптимизации? Альтернативы для оптимизации метода в последних версиях lucene

Я довольно новичок в Lucene. Я пытаюсь понять процесс объединения сегментов. Я столкнулся с методом оптимизации (который объединит все доступные сегменты индекса Lucene в этом случае). Мой точный вопрос: объединяет ли Optimize все уровни сегментов и создает ли один сложный сегмент? Альтернативы в последней версии Lucene(скажем, Lucene 6.5)? Хорошо ли всегда вызывать метод optimize после процесса индексации, чтобы у моего индекса всегда был один сегмент, и поиск был бы быстрым?

1 ответ

Прежде всего, нет необходимости всегда объединять сегменты в один сегмент. Это может быть настроено. В принципе, идея объединения сегментов / оптимизации индекса исходит из реализации удалений в Lucene. Lucene не удаляет документы, а скорее помечает их для удаления, во-вторых, новые документы входят в новые сегменты.

У Lucene есть много файлов для каждого сегмента, таких как словарь терминов и многие другие, поэтому объединение их вместе уменьшит кучу и ускорит поиск. Однако обычно процесс слияния не так быстр.

В целом, вы должны иметь баланс между вызовами слияния / оптимизации каждый раз, когда вы индексируете новые документы, и не выполняете все это. Одна вещь, на которую стоит обратить внимание, - это MergePolicy, которая определяет разные типы слияния с разными стратегиями. Если вы не найдете подходящего для вас (в чем я сомневаюсь), вы можете реализовать его для своих нужд.

Как и в Lucene 6.5, вы можете использовать

public void forceMerge(int maxNumSegments) из IndexWriter учебный класс

Другие вопросы по тегам