我可以通过ElasticSearch Bulk Api中的查询进行更新吗?

时间:2017-06-02 10:57:01

标签: elasticsearch elasticsearch-bulk-api

假设我有1000个用户,每个用户有50个文档(每个文档都嵌入了具有名称和电子邮件的用户对象),我需要为一组用户更新名称和电子邮件。

我想使用Bulk Api,但似乎批量API仅支持“_id”作为参数。我想提出一个查询

例如:我想做,

POST _bulk
{ "update" : {"query" : {"terms": {"userId": "25"}}, "_type" : "comments", "_index" : "comments"} }
{ "doc" : {"user.name" : "new name"} }

而不是

POST _bulk
{ "update" : {"_id" : "1", "_type" : "comments", "_index" : "comments"} }
{ "doc" : {"user.name" : "new name"} }

1 个答案:

答案 0 :(得分:0)

您可以将update by query API用于此目的:

POST comments/_update_by_query
{
  "script": {
    "inline": "ctx._source.user.name = newName",
    "lang": "painless",
    "params": {
      "newName": "new name"
    }
  },
  "query": {
    "term": {
      "userId": "25"
    }
  }
}