2

我正在使用logstash将postgres(jdbc输入插件)中的数据索引到elasticsearch中。我在数据库中没有任何基于时间的信息。要导入的 Postgres 表用户有 2 列 - userid(unique), uname Elastic search export - _id = userid 我在 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 配置正确索引数据。但是,它仅适用于更新和插入情况。如果从表中删除任何数据/用户信息,它不会从弹性搜索索引中删除该文档。有人可以帮我解决删除案例吗?

4

1 回答 1

1

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

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

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

为避免这种情况,您可以将logstash 配置为每小时索引一个新索引,例如。user_data-timestamp,然后使用 curator 等从外部删除旧索引

于 2018-10-24T09:50:56.903 回答