Elasticsearch(033):es中Document(文档)之删除文档

一、概述

上一小节中,我们学习了文档的定义和新增语法。当然,有新增操作,相反的就会有删除操作。es中的文档的删除操作分为两类: 主键删除查询删除

二、删除文档(主键删除)

示例: 下面操作的含义 删除id为1的文档记录

DELETE example/docs/1

返回结果

{ 
  "_index": "example",
  "_type": "docs",
  "_id": "1",
  "_version": 2,
  "result": "deleted",
  "_shards": { 
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 1,
  "_primary_term": 1
}
  • result 得知删除成功

三、删除文档(查询删除)

_delete_by_query语法: 即对查询匹配到的每一个文档执行删除操作。

3.1 数据准备

示例如下

#建立索引和映射
PUT example

PUT example/docs/_mapping
{ 
  "properties": { 
    "id":{ 
      "type": "long"
    },
    "name":{ 
      "type": "text"
    },
    "birthday": { 
      "type": "date"
    }
  }
}

#添加几个测试数据,以供后面查询删除操作
PUT example/docs/1
{ 
  "id":1,
  "name":"张三",
  "birthday": "2019-10-10"
}

PUT example/docs/2
{ 
  "id":2,
  "name":"张四",
  "birthday": "2017-08-08"
}

PUT example/docs/3
{ 
  "id":3,
  "name":"李思思",
  "birthday": "2017-08-08"
}

GET example/docs/_search
{ 
  "query": { 
    "match_all": { }
  }
}

3.2 查询删除匹配的文档

示例如下

#删除名字中包含张的文档
POST example/docs/_delete_by_query
{ 
  "query":{ 
    "match":{ 
      "name": "张"
    }
  }
}

返回结果

{ 
  "took": 24,
  "timed_out": false,
  "total": 2,
  "deleted": 2,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": { 
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

小贴士

_delete_by_query在启动索引时获取索引的快照,并删除使用internal版本控制发现的索引。这意味着,如果在采集到快照版本和处理删除请求之间更改文档,则会遇到版本冲突。当版本匹配时,将删除文档。

scroll_size默认情况下的scroll_size的大小是1000。不过可以通过该参数进行调整。示例如下。

POST example/docs/_delete_by_query?scroll_size=999999

四、删除所有文档

删除所有文档是上一小节查询删除的一种特殊的变体。当查询的条件是匹配所有记录,则执行的删除当前索引下的所有记录数据。该操作会根据数据量的多少,有一定的时间延迟

示例如下

POST example/docs/_delete_by_query
{ 
  "query": { 
    "match_all": { }
  }
}
    原文作者:瘦子没有夏天
    原文地址: https://blog.csdn.net/weixin_39723544/article/details/108403419
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞