Помещение записей в индекс Elasticsearch перед реляционной базой данных

У меня есть приложение, которое использует RSS-каналы и делает их доступными для поиска, выполнив следующие шаги:

  1. извлечение статьи из URL-адреса фида
  2. хранение этих данных в реляционной БД
  3. индексация данных в Elasticsearch

Я хочу обратить этот процесс вспять, чтобы использовать плагин RSS River Elasticsearch для извлечения данных из кормит. Однако этот плагин интегрируется напрямую с Elasticsearch, минуя мою реляционную БД (что является проблемой для других частей приложения, которые полагаются на каждую статью, имеющую запись в БД).

Как сделать так, чтобы Elasticsearch уведомлял БД, когда новая статья была проиндексирована (и удалена из индекса)?

Изменить

В настоящее время я использую Ruby on Rails 4 с БД PostgreSQL. Каналы RSS загружаются в фоновом режиме с помощью Sidekiq для управления заданиями. Они попадают прямо в PG, а затем индексируются Elasticsearch. Я использую Chewy, чтобы обеспечить интерфейс для индекса ES. Он не поддерживает обратные вызовы, как я ищу (ни одна библиотека Ruby не делает afaik?).

Поиск запрашивает ES для совпадений, затем загружает записи из PG для отображения результатов.


person David Tuite    schedule 19.03.2014    source источник
comment
Можете ли вы предоставить больше информации об используемых технологиях? Какой язык вы используете для своей реализации? Какие дбм? Причина в том, что, например. используя django-haystack, вы можете индексировать все данные в обычную базу данных, и она позаботится об обновлении или удалении документов.   -  person paweloque    schedule 25.03.2014
comment
Отредактированный вопрос с более подробной информацией о стеке.   -  person David Tuite    schedule 25.03.2014


Ответы (1)


Похоже, вы ищете функцию уведомления/триггера, описанную в этом запросе функции. . В отсутствие этой функции я думаю, что подход, предложенный в этой ветке пользователем «cravergara», является вашим лучшим выбором, то есть вы можете изменить плагин Elasticsearch RSS river, чтобы обновлять свою БД всякий раз, когда статья индексируется.

Это справится с требованием индексации. Чтобы синхронизировать деиндексацию, вы должны убедиться, что любой код, который удаляет ваши документы Elasticsearch, также удаляет соответствующие записи БД.

person peatb    schedule 21.03.2014