使用Logstash从Elastic Search中删除旧文档

时间:2018-10-24 07:49:01

标签: logstash logstash-configuration logstash-jdbc

我正在使用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配置正确索引数据。但是,它仅适用于更新和插入案例。如果从表中删除了任何数据/用户信息,它将不会从弹性搜索索引中删除文档。有人可以帮我处理删除案例吗?

1 个答案:

答案 0 :(得分:1)

logstash中没有可用的即开即用选项来实现您的预​​期结果。

https://discuss.elastic.co/t/delete-elasticsearch-document-with-logstash-jdbc-input/47490-如此处所述,您可以添加“状态”列,并将该条目标记为已删除,而不是删除该条目。

另一种方法是每小时删除一次索引,然后让logstash完成。当Elasticsearch中没有数据时,这将是一个非常短的持续时间。

为避免这种情况,您可以配置logstash每小时为ex索引到一个新索引。 user_data-timestamp,然后使用策展人等在外部删除较旧的索引