【Elasticsearch实战】使用Java API 根据查询条件进行批量更新某个属性

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判断语句

传入参数 用于向命令传入参数

猜你喜欢

转载自blog.csdn.net/qq171563857/article/details/88070813