Я новичок в lucene. Я пытаюсь понять процесс слияния сегментов. Я наткнулся на метод optimize (который объединит весь доступный сегмент индекса Lucene в этом случае). Мой точный вопрос: объединяет ли Optimize все уровни сегментов и создает ли один сложный сегмент? Альтернативы в последней версии Lucene (скажем, Lucene 6.5)? Хорошо ли всегда вызывать метод оптимизации после процесса индексации, чтобы в моем индексе всегда был один сегмент и поиск выполнялся быстро?
Что делает метод оптимизации? Альтернативы для метода оптимизации в последних версиях lucene
Ответы (1)
Во-первых, необязательно всегда объединять сегменты только в один сегмент. Это можно было настроить. В принципе, идея объединения сегментов / оптимизации индекса исходит из реализации удалений в Lucene. Lucene не удаляет документы, а скорее отмечает их для удаления. Во-вторых, новые документы попадают в новые сегменты.
В Lucene есть много файлов для каждого сегмента, таких как словарь терминов и многие другие, поэтому их объединение уменьшит размер кучи и ускорит поиск. Однако обычно процесс слияния не такой быстрый.
В целом, вам нужно найти баланс между вызовом слияния / оптимизации каждый раз, когда вы индексируете новые документы, и не делать все это. Стоит обратить внимание на MergePolicy, который определяет разные типы слияния с разными стратегиями. Если вы не найдете подходящего для себя (в чем я сомневаюсь), вы можете реализовать его для своих нужд.
Как и в Lucene 6.5, вы можете использовать
public void forceMerge(int maxNumSegments)
из IndexWriter
класса