elasticsearch Logstash配置:如何从ElasticSearch输出插件调用部分更新API?,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash配置:如何从ElasticSearch输出插件调用部分更新API?,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash配置:如何从ElasticSearch输出插件调用部分更新API?

elasticsearch Logstash配置:如何从ElasticSearch输出插件调用部分更新API?,elasticsearch,logstash,elasticsearch,Logstash,我正在尝试创建一个数据管道,其中Logstash jdbc插件每5分钟通过SQL查询获取一些数据,ElasticSearch输出插件将输入插件中的数据放入ElasticSearch服务器。我希望这个输出插件部分更新ElasticSearch服务器中的现有文档。我的日志存储配置文件如下所示: input { jdbc { jdbc_driver_library => "/Users/hello/logstash-2.3.2/lib/mysql-connect

我正在尝试创建一个数据管道,其中Logstash jdbc插件每5分钟通过SQL查询获取一些数据,ElasticSearch输出插件将输入插件中的数据放入ElasticSearch服务器。我希望这个输出插件部分更新ElasticSearch服务器中的现有文档。我的日志存储配置文件如下所示:

input {
    jdbc {
        jdbc_driver_library => "/Users/hello/logstash-2.3.2/lib/mysql-connector-java-5.1.34.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://localhost:13306/mysqlDB”
        jdbc_user => “root”
        jdbc_password => “1234”
        last_run_metadata_path => "/Users/hello/.logstash_last_run_display"
        statement => "SELECT * FROM checkout WHERE checkout_no between :sql_last_value + 1 and :sql_last_value + 5 ORDER BY checkout_no ASC"
        schedule => “*/5 * * * *"
        use_column_value => true
        tracking_column => “checkout_no”
    }
}

output {
    stdout { codec => json_lines }

    elasticsearch {
        action => "update"
        index => "ecs"
        document_type => “checkout”
        document_id => “%{checkout_no}"
        hosts => ["localhost:9200"]
    }
}

问题是ElasticSearch输出插件似乎没有调用部分更新API,例如/{index}/{type}/{id}/\u update。该手册只列出了诸如
索引
删除
创建
更新
,但没有提到每个操作调用REST API URL,也就是说,
更新
操作调用/{index}/{type}/{id}/\u更新或/{index}/{type}/{id}API(upsert)。我想从弹性搜索输出插件调用部分更新api?有可能吗?

有可能。Elasticsearch输出插件具有一系列与Elasticsearch更新API中的选项相对应的
upsert
选项:

  • 向上插入
    自身:
  • 脚本化插入
  • doc\u as\u upert

doc\u设置为\u upsert=>true
action=>“更新”
在我的生产脚本中起作用

output {

  elasticsearch {
    hosts => ["es_host"]
    document_id => "%{id}" # !!! the id here MUST be the same
    index => "logstash-my-index"
    timeout => 30
    workers => 1
    doc_as_upsert => true
    action => "update"
  }
}

这本手册仍然使我困惑。我想通过文档id向ElasticSearch服务器中的现有文档添加一些json键。在这种情况下,我应该使用哪个选项?我认为添加
doc\u as\u upsert=>true就足够了。