Поддерживает ли Logstash _update_by_query от Elasticsearch? - PullRequest
0 голосов
/ 16 ноября 2018

Поддерживает ли выходной плагин Elasticsearch _update_by_query эластичного поиска?https://www.elastic.co/guide/en/logstash/6.5/plugins-outputs-elasticsearch.html https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html

1 Ответ

0 голосов
/ 16 ноября 2018

Плагин вывода 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"
  }
}
...