Lucene - проверка полноты индекса - PullRequest
6 голосов
/ 04 ноября 2019

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

Во избежание необходимости всегда перестраивать индекс при запуске сервера, так как ондовольно медленно, мне было интересно, можно ли проверить индекс на завершение. Я знаю, что есть утилита CheckIndex, но, насколько я понял, она может только проверять, не сломан ли индекс, но не завершен ли он.

Другим вариантом может быть индексатор, который не перестраивается полностьюно завершает уже существующий индекс.

Как лучше всего это сделать? Моя цель состоит в том, чтобы тратить как можно меньше времени на запуск и иметь полный индекс.

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

1 Ответ

1 голос
/ 11 ноября 2019

Действительно, почти в реальном времени indexmanager буферизует изменения в памяти, и, насколько я знаю, в настоящее время невозможно проверить полноту очистки индекса.

Итак, решенияможет быть:

  1. переключиться на на основе каталога indexmanager. (недостаток: худшая производительность по сравнению с индексным менеджером почти в реальном времени)

  2. использует healthcheck сервис, который будет проверять состояние вашего приложения и обновлять флаг isServerForciblyClosed в БД, и еслиэто true, а затем перестроить индекс при следующем запуске. Эта служба должна быть отключена в случае запланированного отключения.

  3. создать собственную реализацию CustomIndexManager, расширяющую встроенные классы, или полностью с нуля, реализующую интерфейс Indexmanager

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...