Elasticsearch版本:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.3.2</version>
</dependency>
关键类: UpdateByQueryRequestBuilder
代码讲解:
TransportClient tc = SpringContextUtils.getBean("transportClient"); // 获取client
UpdateByQueryAction.INSTANCE.newRequestBuilder(tc) // 创建新的请求builder
.source("user") // 设置索引index
.filter(QueryBuilders.termQuery("userId", 123)) // 设置过滤条件
.script(new Script(ScriptType.INLINE, "painless", "ctx._source.isVip=0", Collections.EMPTY_MAP)) // 设置批量修改脚本
.abortOnVersionConflict(false) // 设置ES版本导致问题失败是否停止运行
.get(); // 执行请求命令
source设置的是索引,举个栗子: 我创建了user索引,包含userId属性和isVip属性
filter设置的是过滤条件,QueryBuilders.termQuery("userId", userId) 表示过滤userId为 123 的文档
script设置的是脚本, Script 构造器(脚本类型, 语言, 命令, 传入参数)
脚本类型分为: ScriptType.INLINE 和 ScriptType.STORED
lang语言 painless 是es自带的
命令ctx._source.isVip=0 表示文档的isVip属性设置为0, 同时也支持if判断语句
传入参数 用于向命令传入参数