Elasticsearch 批量更新和删除

有时候我们需要按一定条件对文档作批量修改,比如根据某个属性的值或范围,批量更新或删除相应文档,针对这种情况,elasticsearch 提供了 _update_by_query_delete_by_query API 。这两种方式类似,我们一起来看看怎么使用吧。

批量更新

  • Method: POST
  • Url: http://localhost:9200/test/_update_by_query
  • Body:
    我们将所有 test 索引下的文档添加一条新属性 dream, 值设为 freedom, 请求体如下:
{
  "query": {
    "bool": {
      "should": {
        "match_all": {}
      }
    }
  },
  "script": {
    "inline": "ctx._source[\"dream\"] = \"freedom\"",
    "lang": "painless"
  }
}

说明: 通过 query 匹配文档,采用 bool 方法匹配所有内容;通过 script 脚本修改文档内容,脚本语言使用 elasticsearch 内置的 painless

批量删除

  • Method: POST
  • Url: http://localhost:9200/test/_delete_by_query
  • Body:
    我们将删除 test 索引下所有 hobby 属性为 smoking 的文档, 请求体如下:
{
  "query": {
    "term": {
      "hobby": "smoking"
    }
  }
}

说明: 通过 query 匹配文档,采用 term 方法匹配所有 hobby 属性为 smoking 的文档。

补充说明

以上是按 Query DSL 的格式来发送请求,这种方式更加灵活方便。相较之下,Elasticsearch 还支持 GET + query 的格式,比较麻烦,此处暂不作介绍。

你可能感兴趣的:(elasticsearch,学习笔记)