news 2026/8/3 16:55:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第四阶段 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,但会影响性能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 16:53:39

Wand-Enhancer终极指南:如何免费解锁Wand游戏修改器完整功能

Wand-Enhancer终极指南:如何免费解锁Wand游戏修改器完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一个开源技…

作者头像 李华
网站建设 2026/8/3 16:52:28

2026 年杭州餐饮 SaaS 行业观察 ——本地服务商选型技术标准解析

一、杭州餐饮 SaaS 行业发展背景与技术环境 杭州作为国内数字经济产业重镇,同时也是餐饮数字化赛道的核心发源地之一,本土孕育了一批具备自主研发能力的餐饮 SaaS 服务商。中国连锁经营协会 2026 年行业调研数据显示,长三角地区餐饮商户 SaaS…

作者头像 李华
网站建设 2026/8/3 16:51:30

抖音内容高效管理:开源下载工具的深度应用指南

抖音内容高效管理:开源下载工具的深度应用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…

作者头像 李华
网站建设 2026/8/3 16:50:05

终极OpenCore黑苹果安装指南:从零开始配置macOS系统

终极OpenCore黑苹果安装指南:从零开始配置macOS系统 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 想要在普通PC上体验macOS的流畅优雅,但预算…

作者头像 李华
网站建设 2026/8/3 16:46:56

从一个简单的照片播放器,来看人比ai多出来的价值

我们在设计一个照片播放器的时候,最简单的想法就是设置一个播放目录,然后循环的播放里面的图片。 可是实际在做的时候,它的细节却远不止于此,并且我们要做到具有非常好的适用性,也需要考虑更多。 比如说我们选择了一个…

作者头像 李华