【问题标题】:Elasticsearch painless script update and get in a one POST callElasticsearch 无痛脚本更新并进行一次 POST 调用
【发布时间】:2021-05-24 08:38:50
【问题描述】:

我正在使用 Elasticsearch 7.4,并且有一个独特的要求,即通过无痛脚本在 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"}}}"

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

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

    实现目标的一种方法是:

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

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

    【讨论】:

    • 是的,我终于在应用程序中处理了它,正如你提到的那样,有两个调用,但是对于更新,我使用了并发参数序列和主要 no,因为同一记录可能已被其他服务修改。所以,如果我遇到并发错误,我会重新获取并再次尝试更新。
    • 感谢有关并发参数的提示 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2019-05-04
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多