当前位置: 首页 > news >正文

第四阶段 32 · update_by_query / delete_by_query 条件更新删除

32 · update_by_query / delete_by_query 条件更新删除

阶段:第四阶段 / 写入与索引管理
ES:update_by_query/delete_by_query| PostgreSQL:UPDATE ... WHERE/DELETE ... WHERE


1. 概念

前一篇的update/delete_id操作单文档。
本篇的update_by_query/delete_by_query按查询条件批量操作,
真正对应 SQL 的UPDATE ... WHEREDELETE ... WHERE
更新逻辑通常用脚本(painless)表达。


2. PostgreSQL 对照

-- 条件更新UPDATEsalesdataSETstatus='CLOSED'WHEREgeo_cd='AP'ANDnet_amount=0;-- 条件删除DELETEFROMsalesdataWHEREversion_number='v-old';

3. ES DSL

# 条件更新:给匹配文档加字段 / 改值 POST salesdata_idx/_update_by_query { "query": { "bool": { "must": [ { "term": { "geo_cd": "AP" } }, { "term": { "net_amount": 0 } } ] } }, "script": { "source": "ctx._source.status = params.s", "params": { "s": "CLOSED" } } } # 条件删除 POST salesdata_idx/_delete_by_query { "query": { "term": { "version_number": "v-old" } } }

4. Spring Boot 实现

@ComponentpublicclassDoc32ByQuery{@AutowiredprivateElasticsearchClientelasticsearchClient;/** 条件更新:UPDATE ... SET status='CLOSED' WHERE geo_cd=? AND net_amount=0 */publiclongcloseZeroAmount(StringindexName,StringgeoCd)throwsIOException{UpdateByQueryResponseresp=elasticsearchClient.updateByQuery(u->u.index(indexName).query(q->q.bool(b->b.must(m->m.term(t->t.field("geo_cd").value(geoCd))).must(m->m.term(t->t.field("net_amount").value(0))))).script(sc->sc.inline(in->in.source("ctx._source.status = params.s").params("s",JsonData.of("CLOSED")))).conflicts(Conflicts.Proceed));// 冲突继续而非中断returnresp.updated();}/** 条件删除:DELETE WHERE version_number=? */publiclongdeleteByVersion(StringindexName,Stringversion)throwsIOException{DeleteByQueryResponseresp=elasticsearchClient.deleteByQuery(d->d.index(indexName).query(q->q.term(t->t.field("version_number").value(version))));returnresp.deleted();}}

import:...core.UpdateByQueryResponse...core.DeleteByQueryResponse
co.elastic.clients.json.JsonData...core.search.Conflicts(或_types.Conflicts)。


5. 坑与最佳实践

  1. 是异步分批的批量操作:数据量大时耗时长,可用wait_for_completion=false拿 task id 异步跟踪。
  2. 版本冲突:默认遇冲突中断,设conflicts: proceed可跳过冲突继续。
  3. 脚本性能update_by_query逐文档跑脚本,海量文档慢;能提前算好用 bulk 更快。
  4. 不可回滚:删除/更新不可逆,生产前先用相同query_count确认影响范围。
  5. refresh:需要立即可见可带refresh=true,但会影响性能。

http://www.jsqmd.com/news/1321138/

相关文章:

  • 标书从业者选型参考:2026年标书AI 自动生成工具测评推荐清单
  • AI接单冷启动困局破解:0粉丝如何用1条技术短视频撬动37个精准询盘(含脚本模板+数据看板)
  • 2026年外贸建站平台怎么选:从技术架构到运营效率的决策指南 - 外贸营销驿站
  • Krita AI Diffusion插件中Cinematic Photo (XL)数据类型冲突的全面诊断与修复指南
  • VC++ Build Tools 2015离线安装包制作与部署全攻略
  • 订货小程序推荐适合零售门店的:能看懂“需求天气”的平台更值得选
  • 办公效率提升方案,OpenClaw 本地智能体搭建攻略(含安装包)
  • Windows 7系统下JDK 1.8环境变量配置与多版本管理实战指南
  • AI协作新范式:6个顶级Skill提升Claude、GPT生产力
  • 2026口碑好的石家庄装修设计公司 实力排名7条对比参考 - 产品评测官
  • 【AI大模型原理与API使用】
  • 零基础Python实战入门:从环境搭建到项目开发的避坑指南
  • 如何用YDFID-1色织物缺陷检测数据集彻底改变纺织质检效率
  • 大模型 API 平台哪家划算:自研直营、聚合平台、混合方案三类全拆解
  • FastbootEnhance:告别命令行恐惧,用图形化界面轻松管理安卓设备
  • AI模型不是越“大”越好!:拆解Transformer架构下参数量、上下文窗口与任务泛化能力的非线性阈值关系
  • 2026年压铸模具顶针润滑脂行业趋势及代表性品牌选型指南 - 汇聚至此
  • 百度网盘高速下载终极方案:pan-baidu-download完整使用指南
  • 利用大语言模型构建游戏角色深度分析与内容创作辅助工作流
  • 广州黄金回收实名登记新规解读,合规交易全程可溯源 - 日常比对手册
  • 光传感器选型实战指南:从BH1750到TSL2561的物联网应用解析
  • Unet上采样技术解析:反卷积原理、实现与优化实战
  • 订货系统推荐适合制造业的管理平台:2026制造企业选型指南
  • 5-数据库-SQL注入-布尔盲注-day13
  • SpringBoot 整合 Elasticsearch 实战——搜索、高亮、聚合
  • CTF隐写术实战:从LSB原理到Steghide工具破解全流程解析
  • 大模型面试指南:小白程序员必看!收藏版,助你斩获Offer
  • 2026石家庄装修设计公司排名前十全维度测评 - 产品评测官
  • ArcGIS中Clip与Mask工具的本质区别与应用场景全解析
  • 5分钟掌握抖音下载工具:免费开源无水印批量下载全攻略