Стратегии поддержания индекса Lucene в актуальном состоянии с изменениями модели предметной области - PullRequest
6 голосов
/ 01 сентября 2008

Стремился узнать мнение людей о необходимости обновления индекса Lucene по мере внесения изменений в объекты модели домена приложения.

Рассматриваемое приложение представляет собой веб-приложение на основе Java / J2EE, которое использует Hibernate. В настоящее время все работает так, что все объекты отображенной модели Hibernate реализуют общий интерфейс «Indexable», который может возвращать набор пар ключ / значение, записанных в Lucene. Всякий раз, когда выполняется операция CRUD с таким объектом, я отправляю его через очередь JMS в управляемый сообщениями компонент, который записывает в Lucene первичный ключ объекта и пары ключ / значение, возвращенные из метода index () объекта Indexable, который был предоставлена.

Меня больше всего беспокоит эта схема, если MDB отстает и не успевает за поступающими операциями индексации или если какая-то ошибка / исключение мешает объекту быть индексированным. Результатом является устаревший индекс для сортировки или для длительного периода времени.

По сути, мне просто было интересно, какие стратегии придумали другие для такого рода вещей. Не обязательно искать один правильный ответ, но я представляю список идей типа «доски», чтобы заставить мой мозг задуматься об альтернативах.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2008

Изменить сообщение: просто укажите первичный ключ и текущую дату, а не пары ключ / значение. Ваш mdb выбирает сущность по первичному ключу и вызывает index (). После индексации вы устанавливаете значение «обновлено» в вашем индексе на дату сообщения. Вы обновляете свой индекс, только если дата сообщения находится после поля «обновлено» индекса. Таким образом, вы не можете отстать, потому что вы всегда сначала выбираете текущие пары ключ / значение.

В качестве альтернативы: взгляните на http://www.compass -project.org .

0 голосов
/ 09 марта 2017

Принятому ответу уже 8 лет, и он очень устарел.

Проект Compass больше не поддерживается с тех пор, как его основной разработчик перешел к созданию превосходного Elasticsearch.

Современный ответ на этот вопрос заключается в использовании Hibernate Search , который может случайно отображаться либо в индекс Lucene напрямую, либо через Elasticsearch.

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