api es7 删除所有数据_【Elasticsearch7.0】文档接口之查询delete接口

本文介绍了Elasticsearch7.0中的_delete_by_query接口,用于根据条件删除数据。详细讲解了如何使用该接口进行删除操作,包括版本冲突处理、多索引删除、路由设置、滚动大小调整以及使用Task API进行任务管理。同时,讨论了接口的参数、响应体和错误处理策略。
摘要由CSDN通过智能技术生成

功能介绍

删除除了之前讲的之外,还有可以根据条件来进行删除。_delete_by_query接口是对查询到的结果进行删除操作,如示例:

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

返回值为:

{

"took" : 15,

"timed_out" : false,

"total" : 1,

"deleted" : 1,

"batches" : 1,

"version_conflicts" : 0,

"noops" : 0,

"retries" : {

"bulk" : 0,

"search" : 0

},

"throttled_millis" : 0,

"requests_per_second" : -1.0,

"throttled_until_millis" : 0,

"failures" : [ ]

}

_delete_by_query获取索引启动时的快照,并使用内部版本控制删除它发现的内容,如果在获取快照和删除文档的时候版本发生了改变,那么删除的时候会失败,只有文档的版本号匹配才能删除。注意因为版本号不支持0,所以如果删除的时候版本号传过来的是0,那么删除将失败。

在使用_delete_by_query接口的时候,会依次使用查询接口,来找到相匹配的数据进行删除,每次都会查询出一批数据,使用批量请求进行删除,如果查询或者批量删除被拒绝,_delete_by_query接口有一个默认的重试策略(最多重试10次),如果超过最大重试次数,那么_delete_by_query接口将失败,并会返回错误信息,之前执行的删除操作不会回滚,依然有效,所有的失败结果都会返回,所以会出现多个失败结果的数据。

如果出现版本号冲突时,你不希望中止,那么可以使用conflicts=proceed或者在请求体中设置"conflicts": "proceed"

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty&conflicts=proceed" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

也可以删除多个索引,跟搜索多少索引是一样的。

curl -XPOST "http://127.0.0.1:9200/test,test01/_delete_by_query?pretty" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

如果你使用了路由,那么删除的时候也需要设置路由

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty&routing=1" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

默认情况下,_delete_by_query的滚动大小是1000,当然也可以手动设置该值,在地址后面加scroll_size属性。

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty&scroll_size=5000" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

请求参数

删除接口除了支持pretty参数外,还支持以下参数:refresh, wait_for_completion, wait_for_active_shards, timeout, and scroll。

refresh参数:处理完删除请求之后,如果设置了refresh参数,那么会刷新相关删除相关分片的数据。与delete API不同,delete API只刷新接收删除操作的分片,而且不支持wait_for。

如果请求中包含wait_for_completion=false,则Elasticsearch将在启动请求之前进行检查,然后返回一个任务,该任务可与Tasks api一起用于取消或获取任务状态,Elasticsearch还将在.tasks/task/${taskId}处创建此任务的记录,作为文档,可以随时对该任务进行处理,如果任务完成了,那么一定要把它删除,这样es才能回收空间。

wait_for_active_shards表示在执行请求的时候必须要有多少个活跃的分片。

timeout表示多少时间没有响应就认为请求已经失败。_delete_by_query使用滚动搜索,可以指定scroll参数来设置活跃的时间,默认是5分钟。

requests_per_second可以设置为任意正数,在每个删除操作中设置一个超时时间来控制速率,设置成-1表示禁用。批次大小为1000,requests_per_second为500,

target_time = 1000 / 500 per second = 2 seconds

wait_time = target_time - write_time = 2 seconds - 0.5 seconds = 1.5 seconds

响应体

{

"took" : 147,

"timed_out": false,

"total": 119,

"deleted": 119,

"batches": 1,

"version_conflicts": 0,

"noops": 0,

"retries": {

"bulk": 0,

"search": 0

},

"throttled_millis": 0,

"requests_per_second": -1.0,

"throttled_until_millis": 0,

"failures" : [ ]

}

took

从整个操作开始到结束的毫秒数。

timed_out

如果在查询delete执行期间执行的任何请求超时,则将此标志设置为true。

total

成功处理的文档数量。

deleted

成功删除的文档数量。

batches

滚动获取数据的数量。

version_conflicts

按查询删除所命中的版本冲突数。

noops

总是返回0,只是为了和查询update,查询delete和reindex返回相同的结构体。

retries

按查询删除所尝试的重试次数。bulk是重试的批量操作的数量,search是重试的搜索操作的数量。

throttled_millis

请求休眠以符合requests_per_second的毫秒数。

requests_per_second

在查询delete期间每秒有效执行的请求数。

throttled_until_millis

在_delete_by_query响应中,该字段应该始终等于零。它只有在使用task API时才有意义,在task API中,它指示下一次再次执行节流请求,以符合requests_per_second。

failures

错误返回结果。

使用task api

可以使用task api来做删除操作,如:

curl -XGET "http://127.0.0.1:9200/_tasks?detailed=true&actions=*/delete/byquery"

没有返回内容,但是使用以下请求,会返回task:

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty&wait_for_completion=false" -H "Content-Type: application/json" -d'

{

"query": {

"match": {

"user": "qqq"

}

}

}'

返回值

{

"task" : "8uQK-B00RiWq03awtJok1Q:4028"

}

可以直接根据task来查询

curl -XGET "http://127.0.0.1:9200/_tasks/8uQK-B00RiWq03awtJok1Q:4028?pretty"

返回值为:

{

"completed" : true,

"task" : {

"node" : "8uQK-B00RiWq03awtJok1Q",

"id" : 4028,

"type" : "transport",

"action" : "indices:data/write/delete/byquery",

"status" : {

"total" : 0,

"updated" : 0,

"created" : 0,

"deleted" : 0,

"batches" : 0,

"version_conflicts" : 0,

"noops" : 0,

"retries" : {

"bulk" : 0,

"search" : 0

},

"throttled_millis" : 0,

"requests_per_second" : -1.0,

"throttled_until_millis" : 0

},

"description" : "delete-by-query [test]",

"start_time_in_millis" : 1565187824000,

"running_time_in_nanos" : 7293485,

"cancellable" : true,

"headers" : { }

},

"response" : {

"took" : 3,

"timed_out" : false,

"total" : 0,

"updated" : 0,

"created" : 0,

"deleted" : 0,

"batches" : 0,

"version_conflicts" : 0,

"noops" : 0,

"retries" : {

"bulk" : 0,

"search" : 0

},

"throttled" : "0s",

"throttled_millis" : 0,

"requests_per_second" : -1.0,

"throttled_until" : "0s",

"throttled_until_millis" : 0,

"failures" : [ ]

}

}

也可以取消task

curl -XPOST "http://127.0.0.1:9200/_tasks/8uQK-B00RiWq03awtJok1Q:4028/_cancel?pretty"

切分

查询delete支持滚动切分,通过并行可以提升处理性能。

手动切分

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty" -H "Content-Type: application/json" -d'

{

"slice": {

"id": 0,

"max": 2

},

"query": {

"range": {

"likes": {

"lt": 10

}

}

}

}'

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?pretty" -H "Content-Type: application/json" -d'

{

"slice": {

"id": 1,

"max": 2

},

"query": {

"range": {

"likes": {

"lt": 10

}

}

}

}'

自动切分

使用slices参数来设置需要多少slices。

curl -XPOST "http://127.0.0.1:9200/test/_delete_by_query?refresh&slices=5&pretty" -H "Content-Type: application/json" -d'

{

"query": {

"range": {

"likes": {

"lt": 10

}

}

}

}'

部分返回值

也可以关注我的公众号:程序之声

关注公众号,领取更多资源。

本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值