Elasticsearch 批量更新和删除

来源:互联网 发布:蓝月传奇光翼升阶数据 编辑:程序博客网 时间:2024/06/08 01:00

有时候我们需要按一定条件对文档作批量修改,比如根据某个属性的值或范围,批量更新或删除相应文档,针对这种情况,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 的格式,比较麻烦,此处暂不作介绍。

原创粉丝点击