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

StackOverflow https://stackoverflow.com/questions/38125

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top