Плагин вывода elasticsearch
может выполнять вызовы только к конечной точке _bulk
, т. Е. С использованием Bulk API .
Если вы хотите вызвать API-интерфейс Update by Query, вам нужно использовать плагин вывода http
и создать запрос внутри события самостоятельно. Если вы объясните, чего хотите достичь, я могу дополнить свой ответ более подробной информацией.
Примечание: существует проблема , запрашивающая эту функцию, но она все еще открыта через два года.
UPDATE
Так что, если ваше входное событие {"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"
}
}