elasticsearch文档Delete By Query API(一)

news2024/9/27 23:31:13

这里的查询需要使用和Search API(后文会讲)相同的方式来将查询条件作为query的值传递,当然也可以使用q关键字,例如如下请求:

curl -X POST “localhost:9200/twitter/_delete_by_query?pretty&q=user:kimchy” -H ‘Content-Type: application/json’

执行结果如下:

640?wx_fmt=png

delete by query在索引启动时获取索引的快照,并使用内部版本控制删除它找到的文档。这意味着如果文档在拍摄快照的时间和处理删除请求之间发生更改,就会出现版本冲突,当版本匹配时(即未出现冲突时),文档将被删除。

注意

由于内部版本控制不支持值0作为有效的版本号,因此无法使用 _delete_by_query删除版本等于零的文档,并且将请求失败。

在 _delete_by_query执行期间,顺序执行多个搜索请求以便找到要删除的所有匹配文档。每次找到一批文档时,都会执行相应的批量请求以删除所有这些文档。如果搜索或批量请求被拒绝,则 _delete_by_query会默认进行重试,最多10次,达到最大重试次数限制会导致 _delete_by_query操作中止,并且所有的失败信息在响应的failures字段中给出。对于已执行的删除仍然有效,换句话说,这个过程不会回滚,只会中止。当第一个失败导致中止时,失败的批量请求返回的所有失败信息都将在响应的failures元素中给出,因此可能存在相当多的失败实体。

如果只是想计算版本冲突而不是让它们中止,那么可以设置在URL中添加conflicts=proceed参数,或者在请求体中设置 "conflicts":"proceed"

开发者可以将 _delete_by_query限制为单一类型,例如如下请求,将会从 twitter索引中删除 _doc类型的文档:

curl -X POST “localhost:9200/twitter/_doc/_delete_by_query?conflicts=proceed&pretty” -H ‘Content-Type: application/json’ -d’

{

“query”: {

“match_all”: {}

}

}

请求执行结果如下:

640?wx_fmt=png

也可以一次删除多个索引和多个type,如下:

curl -X POST “localhost:9200/twitter,blog/_doc,post/_delete_by_query?pretty” -H ‘Content-Type: application/json’ -d’

{

“query”: {

“match_all”: {}

}

}

请求执行结果如下:

640?wx_fmt=png

如果开发者使用了路由,那么路由将被拷贝到滚动查询,那么删除操作将在路由相匹配的分片上执行,如下:

curl -X POST “localhost:9200/twitter/_delete_by_query?routing=2&pretty” -H ‘Content-Type: application/json’ -d’

{

“query”: {

“range” : {

“age” : {

“gte” : 10

}

}

}

}

执行结果如下:

640?wx_fmt=png

默认情况下, _delete_by_query滚动批处理上限为1000,可以在URL中使用 scroll_size参数更改批量大小:

curl -X POST “localhost:9200/twitter/_delete_by_query?scroll_size=5000” -H ‘Content-Type: application/json’ -d’

{

“query”: {

“term”: {

“user”: “kimchy”

}

}

}

2.URL Parameters

除了elasticsearch API约定(二)一文向读者介绍的公共参数如pretty之外, DeleteByQueryAPI还支持 refresh、 wait_for_completion、 wait_for_active_shards、 timeout以及 requests_per_second

2.1 refresh

发送refresh请求将在删除请求完成后刷新 deletebyquery中涉及到的所有分片,这不同于elasticsearch文档Delete API一文中提到的refresh参数,后者仅刷新接收删除请求的分片。

2.2 waitforcompletion

如果请求包含 wait_for_completion=false,则Elasticsearch将执行一些预检查、启动请求、然后返回task,可与Tasks API一起使用来取消或获取任务状态。Elasticsearch还将以.tasks/task/${taskId}作为文档创建此任务的记录,开发者可以自行决定是否保留这个记录,如果删除记录,那么Elasticsearch可以回收它使用的空间。

2.3 waitforactive_shards

waitforactive_shards参数的作用和elasticsearch文档索引API(二)一文中介绍的含义一致,这里不再赘述,读者可以参考该篇文章。

2.4 timeout

timeout控制每个写入请求等待不可用分片变为可用分片的时间。

2.5 scroll

由于 _delete_by_query采用滚动搜索,你还可以指定 scroll参数来控制在多长时间保持“搜索上下文”活着,例如添加 ?scroll=10m参数,默认情况下它是5分钟。

2.6 requestspersecond

requestspersecond可以被设置为任何正十进制数(1.4,6, 1000等),通过该参数可以限制 delete-by-query发出的每秒请求数量,也可以通过设置requestspersecond=-1来禁用这种限制。

节流是通过在批处理之间等待来实现限制作用,通过在 _delete_by_query内部的每批次之间填充时间来实现节流,填充时间是批量大小除以requestspersecond与写入操作所花费的时间之间的差异。在默认情况下,批量大小为1000,因此如果requestspersecond设置为500,填充时间计算如下:

target_time = 1000 / 500 per second = 2 seconds

wait_time = target_time - write_time = 2 seconds - .5 seconds = 1.5 seconds

由于批处理是作为单个_bulk请求发出的,因此大数据量的批处理将导致Elasticsearch创建许多请求,然后等待一段时间再开始下一组。这是 bursty而不是 smooth

3.Response body

根据前面的介绍,响应的数据类似于如下格式:

{

“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” : [ ]

}

各字段的含义分别如下:

1.took

执行整个操作所耗费的时间,单位为毫秒。

2.timed_out

在整个操作执行过程中,如果发生了任何的请求超时,则将此字段标记为true。

3.total

成功处理的文档数。

4.deleted

成功删除的文档数。

5.batches

通过 deletebyquery删除的滚动响应数量。

6.version_conflicts

版本冲突数。

7.noops

这个字段在删除响应中始终为0。它的存在只是为了 deletebyquery、 updatebyquery以及 reindexAPIs具有相同的响应结构。

8.retries

这个是重试次数,bulk是bulk行为的重试次数,search是search行为的重试次数。

9.throttled_millis

请求休眠的毫秒数。

10.requestspersecond

在 deletebyquery期间每秒执行的请求数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2104353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务…

六西格玛项目:从定义问题到控制成果,全程无忧——张驰咨询

什么是六西格玛项目 六西格玛项目是一种旨在通过改善企业质量流程管理,以“零缺陷”的完美商业追求,带动质量大幅提高、成本大幅度降低,最终实现企业财务成效的提升与企业竞争力的突破的管理策略。它由摩托罗拉公司的工程师比尔史密斯于1986…

文心一眼 4.0Turbo 免费领取5天体验卡

注:这个是官方的活动,目的在于用户推广,任何账号点击连接都可以领取,被分享者领取5天,分享者获得3天,上限320天。 官方活动跳转地址如下:​​​​​​点击这里 跳转后登录,完成一次…

浅析前端数据埋点监控:用户行为与性能分析的桥梁

在数字化时代,数据是企业决策的重要依据。前端作为用户与产品交互的第一线,其数据埋点监控不仅能够收集用户行为数据,帮助产品团队洞察用户需求,优化用户体验,还能分析性能数据,确保产品运行的流畅性。 简单…

LLM常见问题(思维链变体部分)

1. 为什么需要思维树 Tree of Thoughts(TOT)? 对于需要探索或预判战略的复杂任务来说,传统或简单的提示技巧是不够的。ToT 维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使…

【计算机组成原理】你敢相信5.8+0.9=6.1这个等式居然成立!!!详细解读进制数之间的相互转换

进位计数制及其相互转换 导读一、进位计数法1.1 基数1.2 位权 二、不同进制数之间的相互转化2.1 转化方法2.2 任意进制转化成十进制2.3 十进制转化成任意进制2.4 二进制、八进制以及十六进制之间的相互转换2.4.1 二进制与八进制以及十六进制之间的关系2.4.2 二进制数与八进制数…

【C++】C++中的关键字:const、mutable、auto、new....

七、C中的关键字:const、mutable、auto、new、 本部分打算是尽量多的罗列出C中的关键字和一些花式操作。先总结一下我们之前讲过的:private、public、protect: 参考【C】类、静态、枚举、重载、多态、继承、重写、虚函数_静态与多态:重写、重载、模板-C…

如何使用PTK一键安装opengaussdb 5.0

1、关于PTK工具 MogDB数据库是云和恩墨基于openGauss开源数据库打造,安稳易用的企业级关系型数据库。 PTK是云和恩墨出品的一款工具,帮助用户更便捷地部署管理MogDB数据库。 1.1 使用场景 开发人员快速启动多个本地 MogDB 环境用户通过 PTK 快速安装…

(2)Django生产环境数据库的切换以及环境配置python-dotenv方案

简介 本文分享下个人目前在用的,DRF项目开发环境、生产环境数据库切换的方案。没做过什么大项目,可能实现的不是那么优雅。 主要思路就是通过python-dotenv库,编辑.env环境配置文件区分开发环境和生产环境,再使用数据库路由&…

IP 协议详解

一、认识 IP 地址与网络层的职责 网络层是OSI七层模型中的第三层,也是TCP/IP四层模型中的网络接入层。在这一层,数据包被封装并加上IP层的头部信息,以便在网络之间传输。网络层的主要功能包括路由选择、分段与重组、拥塞控制以及IP地址管理等…

深度学习--机器学习相关(2)

1.适 应 性 矩 估 计 适应性矩估计(Adaptive Moment Estimation,Adam)是一种可以代替传统的梯度下降 (SGD 和 MBGD) 的优化算法。Adam算法结合了适应性梯度算法和均方根传播的优点。 Momentum 在学习机器学习时是很可能遇到的,是动量的意思。动量不是速度和学…

智能提醒助理系列-AIGC模型如何对接公众号2-扣子

本系列文章记录“智能提醒助理”wx公众号 建设历程。 一、需求出发点 在公众号中对接上大模型。 二、实现路径分析 上次使用直接调用火山引擎大模型的方案:智能提醒助理系列-AIGC模型如何对接公众号 近期 跟朋友跟朋友交流的过程中发现,通过扣子制作…

一招制胜!掌握 Python 中pip的8个必备命令

在Python编程中,pip 是一个非常重要的工具。它是Python包管理器,帮助你安装、更新、删除和管理Python软件包。如果你想要轻松地使用第三方库(比如requests、numpy、pandas),就离不开pip。 什么是 pip? pip…

Midjourney提示词——黑神话悟空角色生成提示词!

应广大群友和粉丝要求,我们也来盘一盘最近大火的黑神话悟空的提示词。 这里给大家准备了一份关于AI绘画详细的资料包,扫描下方二维码皆可获取! 1号齐天大圣 The full-body portrait of the Monkey King in-game, clad in intricate war rob…

Java运行环境的下载、安装、配置与运行

一、实验目的及要求 目的:掌握如何下载java JDK软件包,如何设置Java程序的运行环境,如何编写与运行Java程序,了解Java概貌。 要求: 1、安装Java JDK软件包; 2、练习编写简单的Java Application程序并掌握…

2.5 SQL注入之文件读写

SQL注入之文件读写 文件读写注入的原理 就是利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息。 文件读写注入的条件 高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限 …

步进、闭环、交流伺服三类电机驱动方案对比

1、步进、闭环、交流伺服产品对比 2.4步进电机特点 低速力矩大,转矩会随着转速的提高而降低,一般在800rpm以上力矩下降加快,精度是步距角的3%~5%,整圈没有累积误差,两相混合步进电机精度为0.18;步进电机采…

黑神话悟空小黄龙怎么打 妖王小黄龙攻略

​黑神话悟空小黄龙是游戏中难度较高的BOSS之一,击败他可以解锁[龙]变身、解锁橙武[飞龙宝杖],如果想要获得这两个法宝却又不知道如何击败小黄龙的话,一起来看看下面这篇攻略吧。 一、BOSS位置 【盘丝岭】-【盘丝洞】-【堕龙壁】。 二、Boss…

深入探索Springboot2.x依赖注入Bean的CGLIB代理类

问题起源 笔者最近在做一个功能,使用了工厂模式/策略模式设计的,定义了一个接口,下面有多种实现并通过Component注解定义为Bean,在运行时根据不同的业务调用不同实现的Bean,所以需要在运行时动态获取Bean。因此&#…

Keil5如何生成静态库.lib文件

一、这是一个Keil5工程 二、我想把这个文件输出成一个.lib文件,里面有一个加法函数,其它工程想实现加法只需调用这个函数即可 三、因为我只需要输出这一个文件成.lib,所以我需要屏蔽其它文件 1、右键其它文件,点击这个 2、把这个…