我正在使用logstash将数据从postgres(jdbc输入插件)索引到elasticsearch。我在数据库中没有任何基于时间的信息。 用户要导入的Postgres表有2列-userid(unique),uname 弹性搜索导出-_id =用户ID 我每小时都会在logstash中使用cron计划导出此数据。
input {
jdbc {
schedule => "0 */1 * * *"
statement => "SELECT userid, uname FROM users"
}
}
output {
elasticsearch {
hosts => ["elastic_search_host"]
index => "user_data"
document_id => "%{userid}"
}
}
此logstash配置正确索引数据。但是,它仅适用于更新和插入案例。如果从表中删除了任何数据/用户信息,它将不会从弹性搜索索引中删除文档。有人可以帮我处理删除案例吗?
答案 0 :(得分:1)
logstash中没有可用的即开即用选项来实现您的预期结果。
https://discuss.elastic.co/t/delete-elasticsearch-document-with-logstash-jdbc-input/47490-如此处所述,您可以添加“状态”列,并将该条目标记为已删除,而不是删除该条目。
另一种方法是每小时删除一次索引,然后让logstash完成。当Elasticsearch中没有数据时,这将是一个非常短的持续时间。
为避免这种情况,您可以配置logstash每小时为ex索引到一个新索引。 user_data-timestamp,然后使用策展人等在外部删除较旧的索引