一、概述
在上一小节中,我们学习了文档的定义和新增语法。当然,有新增操作,相反的就会有删除操作。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": { }
}
}