Есть ли способ узнать, какие документы обновляются / пишутся в течение дня в Solr Index?

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

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

Хотя я знаю, что это довольно легко реализовать с помощью таких продуктов, как Oracle Coherence, и Solr не подходит для этой цели. Но теперь мы не можем вернуться назад и изменить решение.

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

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

В качестве улучшения этого подхода мы хотим, чтобы мы предоставили другой сервис, который возвращает вставленные / обновленные / удаленные данные в индекс solr в течение определенного периода времени. что-то вроде /companyIndex/itr/15, которое дает модификацию индекса компании за последние 15 минут. Это поможет клиентам сократить объем данных, которые они будут обрабатывать. Как только клиент берет полный набор данных из индекса, он может работать с инкрементными обновлениями позже, и таким образом набор данных клиентов будет синхронизирован с основным набором данных. Некоторое отставание все еще будет там, но это хорошо.

Есть ли способ добиться этого с помощью самого solr / lucene? Поддерживает ли solr контрольный журнал, который может быть раскрыт?

Хотя мы можем хранить такую ​​информацию в нашем слое загрузки данных, но мы хотели бы узнать, можно ли использовать что-то, имеющееся в solr?

Любые предложения / мнения?

1 ответ

Решение

Есть несколько способов справиться с этим. Lucene предоставляет информацию о коммитах в IndexDeletionPolicy (см. IndexCommits), который Solr использует для включения собственной репликации. Вероятно, вы можете подключиться к репликации самостоятельно и получить текущую версию индекса и то, какие файлы за это время изменились (см. HTTP API для репликации).

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

Надеюсь, это укажет вам правильное направление!

Другие вопросы по тегам