Elasticsearch 无痛脚本更新并获得一个 POST 调用

Elasticsearch painless script update and get in a one POST call

我正在使用 Elasticsearch 7.4,并且有一个独特的要求通过 painless 脚本在 elasticsearch 中执行以下操作:-

  1. 通过无痛脚本更新字段
  2. 在响应中获取更新值

#1 我可以使用下面的无痛脚本来更新计数器值,但是我怎样才能得到更新后的值作为响应?我想要新值 ctx._source.counter 来响应我发出的 POST 调用,有什么办法吗?

curl -XPOST -H "Content-Type:application/json" localhost:9200/myindex/_update_by_query -d "{"query":{"bool": {"filter":[{"match":{"field1":"1"}}]}},"script":{"source":"ctx._source.counter = ctx._source.counter + params.incrementValue","lang":"painless","params":{"incrementValue":"2"}}}"

您想要的与specs of the _update_by_query API不同。在规范中,您可以看到响应仅包含更新的统计信息和状态,而不包含文档正文(初始或最终)。

实现目标的一种方法是:

  1. 要更新的查询文档,即。其中 field1==1
  2. 获取初始计数器值
  3. 更新

有了这个,您可以使用您选择的方法在您的最后计算更新的值。 无论如何,这将是两次 API 调用,而不仅仅是一次