如何定时更新 Elasticsearch 中的数据?

How to update data in Elasticsearch on a schedule?

我在 PostgreSQL 数据库中有一个 table。我想将 table 中的数据插入到 Elasticsearch 的索引中。我需要按计划更新索引数据。换句话说,删除旧数据并插入新数据。我有这样的 Logstash 配置文件,但它不会更新索引中的数据。它是插入数据,但同时我看到了旧数据。因此,会出现重复数据。如何正确定时更新 Elasticsearch 中的数据?

input {
    jdbc {
        jdbc_connection_string => "jdbc:postgresql://host:port/postgres"
        jdbc_user => "postgres"
        jdbc_password => "postgres"
        jdbc_driver_library => "postgresql-42.2.9.jar"
        jdbc_driver_class => "org.postgresql.Driver"
        statement => "SELECT * FROM layers;"
        schedule => "0 0 * * MON"
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "layers"
    }
}

你的索引名称没有改变,所以每次你添加新记录时,它都会添加到同一个索引中。

添加日期时间post修复索引

index => "layers%{+YYYY.MM.dd}"

所以每个日期都会有一个新索引。

现在为搜索创建一个别名,这样您就可以始终在您的应用程序中使用相同的名称。例如:layers/_search 通过添加如下别名:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "layers-2019.12.11",
        "alias": "layers"
      }
    }
  ]
}

以上步骤是通过 kibana 或者您可以使用 http post。但是,我建议使用 Curator for alias operations。这样,一旦 log stash 命令完成,您就可以 运行 curator 从别名中删除当前索引并添加新创建的索引。