Elasticsearch 无痛脚本更新并获得一个 POST 调用
Elasticsearch painless script update and get in a one POST call
我正在使用 Elasticsearch 7.4,并且有一个独特的要求通过 painless 脚本在 elasticsearch 中执行以下操作:-
- 通过无痛脚本更新字段
- 在响应中获取更新值
#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不同。在规范中,您可以看到响应仅包含更新的统计信息和状态,而不包含文档正文(初始或最终)。
实现目标的一种方法是:
- 要更新的查询文档,即。其中 field1==1
- 获取初始计数器值
- 更新
有了这个,您可以使用您选择的方法在您的最后计算更新的值。 无论如何,这将是两次 API 调用,而不仅仅是一次 。
我正在使用 Elasticsearch 7.4,并且有一个独特的要求通过 painless 脚本在 elasticsearch 中执行以下操作:-
- 通过无痛脚本更新字段
- 在响应中获取更新值
#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不同。在规范中,您可以看到响应仅包含更新的统计信息和状态,而不包含文档正文(初始或最终)。
实现目标的一种方法是:
- 要更新的查询文档,即。其中 field1==1
- 获取初始计数器值
- 更新
有了这个,您可以使用您选择的方法在您的最后计算更新的值。 无论如何,这将是两次 API 调用,而不仅仅是一次 。