这个
elasticsearch
输出插件只能调用
_bulk
端点,即使用
Bulk API
.
如果要调用按查询更新API,则需要使用
http
输出插件并在事件内部自己构造查询。如果你解释你想要达到的目标,我可以用更多的细节更新我的答案。
注意:有一个
issue
请求此功能,但两年后仍将打开。
更新
所以如果你的输入事件是
{"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"
}
}
}
所以您的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"
}
}