Я делаю это в проекте, над которым я работаю, и пока он работает нормально, я использую logstash как отдельное приложение, и каждый раз, когда я хочу обновить данные, я обновляю материализованное представление и запускаю logstash, используя драйвер postgres.(в моем случае у меня есть работа на сервере, которая делает это каждые 2 часа).Для этого вам нужно запустить командную строку: path/to/logstash/bin/logstash -f path/to/postgres2elasticsearch.conf
И в файле "postgres2elasticsearch.conf" вы должны указать:
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}"
jdbc_user => "${RDS_USERNAME}"
jdbc_password => "${RDS_PASSWORD}"
jdbc_driver_library => "${DRIVE_PATH}"
jdbc_driver_class => "org.postgresql.Driver"
statement => "SELECT * from ${MY_MATERIALIZED_VIEW} order by ${ID_FIELD}"
jdbc_paging_enabled => true
}
}
output {
elasticsearch {
index => "${ES_INDEX}"
hosts => ["${ES_DATA_HOST}:443"]
}
}
Предложение order by
взапрос важен, потому что logstash будет вставлять данные в пакетном режиме, и если вы не упорядочите данные, возможно, что часть данных будет дублирована, а другая часть вообще не перейдет вasticsearch, поэтому я предлагаю вам иметьиндексируемое уникальное поле на вас материализовано.И вам нужно будет скачать драйвер postgres jdbc и поместить его в $ {DRIVE_PATH}