ElasticSearch - 使用 WHERE 子句一次更新多个文档

Stp*_*111 4 elasticsearch

Linux 上的 ElasticSearch 6.2.2 - 所有活动均通过 API 调用实现 - 我们没有设置 Kibana。

我正在尝试将大约 5,000 个文档的一个字段更新为相同的值。现在我只知道如何使用以下 API 调用一次更新一个文档:

网址:

POST http://{{elasticip}}:9200/{{index}}/_doc/{{docid}}/_update?pretty
Run Code Online (Sandbox Code Playgroud)

身体:

{
  "doc": { "categories": [ "NEWS" ]}
}
Run Code Online (Sandbox Code Playgroud)

我有大约 5k 个文档,其categories值为null. 所以我需要执行一个更新 API 调用,更新所有categories包含nullvalue 的文档[ "NEWS" ]

这可以通过 API 调用来实现吗?

Val*_*Val 10

这可以使用查询更新 API 来实现:

POST your-index/_update_by_query
{
  "script": {
    "source": "ctx._source.categories = params.categories",
    "lang": "painless",
    "params": {
      "categories": ["NEWS"]
    }
  },
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "categories"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)