Удалите старые документы из Elastic Search, используя logstash
Я использую logstash для индексации данных из postgres(входной плагин jdbc) в asticsearch. У меня нет никакой временной информации в базе данных. Пользователи таблицы Postgres для импорта имеют 2 столбца - userid(уникальный), uname Экспорт эластичного поиска - _id = userid Я экспортирую эти данные каждый час, используя расписание cron в logstash.
input {
jdbc {
schedule => "0 */1 * * *"
statement => "SELECT userid, uname FROM users"
}
}
output {
elasticsearch {
hosts => ["elastic_search_host"]
index => "user_data"
document_id => "%{userid}"
}
}
Эта конфигурация logstash правильно индексирует данные. Но это работает только для случаев обновления и вставки. Если какие-либо данные / информация о пользователе будут удалены из таблицы, документ не будет удален из индекса эластичного поиска. Может кто-нибудь помочь мне с делом об удалении?
1 ответ
В logstash нет опции "из коробки" для достижения желаемого результата.
https://discuss.elastic.co/t/delete-elasticsearch-document-with-logstash-jdbc-input/47490 - как уже упоминалось, вы можете добавить столбец "status" и пометить запись как удаленную вместо удаляя запись.
Другим способом сделать это будет удаление индекса каждый час, а затем позволить logstash сделать свое дело. Будет очень короткая продолжительность, когда не будет данных в Elasticsearch.
Чтобы избежать этого, вместо этого вы можете настроить logstash для индексации нового индекса каждый час, например. user_data-timestamp, а затем удалить старые индексы извне, используя куратор и т. д.