Val*_*Val 5

elasticsearch输出插件只能拨打电话到_bulk终点,即使用批量API

如果你想调用Update by Query API,你需要使用http输出插件并自己在事件内部构造查询。如果您解释了您想要实现的目标,我可以用更多细节更新我的答案。

注意:请求此功能时出现问题,但两年后它仍处于开放状态。

更新

所以,如果你输入的事件是{"cname":"wang", "cage":11},你通过查询所有文件要更新"cname":"wang"到组"cage":11,您的查询需要这个样子的:

POST your-index/_update_by_query
{
  "script": {
    "source": "ctx._source.cage = params.cage",
    "lang": "painless",
    "params": {
      "cage": 11
    }
  },
  "query": {
    "term": {
      "cname": "wang"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以你的 Logstash 配置应该是这样的(你的输入可能会有所不同,但我用于stdin测试目的):

input {
  stdin {
    codec => "json"
  }
}
filter {
  mutate {
    add_field => {
      "[script][lang]" => "painless"
      "[script][source]" => "ctx._source.cage = params.cage"
      "[script][params][cage]" => "%{cage}"
      "[query][term][cname]" => "%{cname}"
    }
    remove_field => ["host", "@version", "@timestamp", "cname", "cage"]
  }
}
output {
  http {
    url => "http://localhost:9200/index/doc/_update_by_query"
    http_method => "post"
    format => "json"
  }
}
Run Code Online (Sandbox Code Playgroud)