Как лучше всего индексировать постоянно изменяющиеся данные в базе данных PostgreSQL в базу данных Solr / Elasticsearch?

У меня есть база данных postgres на AWS RDS, и я хочу выполнить в ней сложный поиск. Однако данные, которые я буду запрашивать, постоянно меняются с очень большим количеством операций записи / обновления. Поэтому я не уверен, как я должен передавать данные в solr / elasticsearch эффективно и надежно.

Спасибо за помощь

8
Al Hennessey 24 Дек 2015 в 20:31

2 ответа

Лучший ответ

Рискуя, что кто-то пометит этот вопрос как дубликат, вот ссылка для настройки postgres-to- elasticsearch в другом потоке StackOverflow. Также есть это сообщение в блоге на Atlassian, в котором также говорится о том, как получать обновления из PostgreSQL в ElasticSearch в реальном времени.

Поток Atlassian для широкой публики использует хранимые процедуры PGS для копирования обновленных / вставленных данных в промежуточную таблицу, а затем отдельно обрабатывает промежуточную таблицу. Это хороший подход, который подойдет как для ES, так и для Solr. К сожалению, это решение для вас, если вы не знакомы с Clojure.

9
Community 23 Май 2017 в 12:25

В случае Solr общий подход заключается в использовании Data Import Handler (для краткости DIH). Сконфигурируйте sql полного импорта и дельта-импорта, где delta import импортирует данные из базы данных, которые изменились с момента последнего импорта, судя по отметкам времени (так что вам нужна схема проектирования с соответствующими отметками времени).

Тайминг дельта-импорта имеет 2 стиля, которые можно использовать по отдельности или вместе:

  • Делайте дельта-импорт с таймером. (например, каждые 5 минут)
  • После каждого обновления в базе данных вызывайте дельта-импорт.

См. https : //cwiki.apache.org/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handler для подробностей DIH.

4
Eric Wang 24 Дек 2015 в 17:38