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

时间:2018-09-24 16:25:55

标签: elasticsearch

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

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

网址:

POST http://{{elasticip}}:9200/{{index}}/_doc/{{docid}}/_update?pretty

身体

{
  "doc": { "categories": [ "NEWS" ]}
}

我大约有5k文档,其categories值为null。因此,我需要执行一个更新API调用,该更新API调用categories字段为null且值为[ "NEWS" ]的所有文档。

通过API调用可以实现吗?

1 个答案:

答案 0 :(得分:2)

这可以使用update by query 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"
        }
      }
    }
  }
}