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

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


person N.Dinesh.Reddy    schedule 18.09.2017    source источник


Ответы (1)


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

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

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

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

public void forceMerge(int maxNumSegments) из IndexWriter класса

person Mysterion    schedule 19.09.2017