Можно ли заново сгенерировать индекс Lucene в фоновом режиме? - PullRequest
0 голосов
/ 07 сентября 2010

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

В моем случае создание индекса занимает от 5 до 6 часов, очистка индекса перед этим приводит к тому, что данные за этот интервал не завершаются. И. е. выполнение поиска в это время возвращает неполный результат.

Есть ли какой-нибудь стандартный способ заставить lucene генерировать индекс в фоновом режиме? Например. записать индекс во временный каталог и (когда индексирование завершено без исключений и т. д.) заменить существующий индекс новым?

Конечно, можно реализовать это "вручную", но нужно ли это? Для меня это похоже на обычный случай использования.

С наилучшими пожеланиями + Спасибо за ваше мнение,

Питер:)

Ответы [ 3 ]

0 голосов
/ 15 октября 2010

У меня был похожий опыт; в анализаторе были определенные параметры, которые время от времени менялись; очевидно, если бы это было так, весь индекс должен быть восстановлен. (Я не буду вдаваться в подробности, достаточно сказать, что у меня такое же требование!)

Я сделал то, что вы предложили в своем вопросе. Было три каталога: «старый», «текущий» и «новый». Запросы с живого сайта всегда шли против «текущих». Индекс рекреационного процесса составил:

  1. Рекурсивное удаление в "старых" и "новых" каталогах
  2. Создать новый индекс в «новом» каталоге (в моем случае это занимает около 6 часов)
  3. Переименовать «текущий» в «старый»; и "новый" в "текущий"
  4. Рекурсивно удалить "старый" каталог

Анализ того, что происходит, когда происходит сбой процесса - если он произойдет сбой на 1-м шаге, в следующий раз он просто продолжится. Если во 2-м шаге произойдет сбой, то «новый» каталог будет удален при следующем запуске. Третий шаг очень быстрый - переименование каталога быстрое и атомарное. Сбой на 4-м шаге не имеет значения, он просто будет очищен при следующем запуске.

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

0 голосов
/ 15 декабря 2010

У нас похожая проблема.Наши данные индексируются в Lucene, но исходным источником является БД и репозиторий.

Так что, если индекс не синхронизируется (или изменяется тип данных и т. Д.), Мы просто перебираем все существующие записи виндексировать и заново генерировать данные, чтобы каждый документ обновлялся.Это не очень сложная вещь.

0 голосов
/ 10 сентября 2010

Я думаю, что обычный способ сделать это - использовать функцию репликации solr.В вашем случае, однако, ведущий и ведомый будут находиться на одной машине, но просто будут указывать на разные каталоги.

...