使用BulkIngester + Stored Script 更新数据 (Elasticsearch Java Client API )

在实时流中接数据需要这样的API 

8.7之后才会有BulkIngester 替代 BulkProcessor, 但是8.7的客户端可以访问低版本的es,比如8.2.x

7.x的bulkprocessor 访问 8.2 会报错

(新API 不熟悉 ,感觉比High Level api 难用)

bulkIngester   官网 Bulk: indexing multiple documents | Elasticsearch Java API Client [8.7] | Elastic

(1) 保存script

POST _scripts/update_wb_content_bhv_let
{
  "script": {
    "lang": "painless",
    "source": "if(ctx._source.tran_cnt==null){ctx._source.tran_cnt = params.tran_cnt;} else{ctx._source.tran_cnt += params.tran_cnt ;} if(ctx._source.comment_cnt==null){ctx._source.comment_cnt = params.comment_cnt;} else{ctx._source.comment_cnt += params.comment_cnt ;} if(ctx._source.like_cnt==null){ctx._source.like_cnt = params.like_cnt;}else{ctx._source.like_cnt += params.like_cnt ;}"
  }
}

(2) 在代码中使用

Map<String, JsonData> param = new ImmutableMap.Builder<String, JsonData>()
    .put("tran_cnt", JsonData.of(tran_cnt)).put("comment_cnt", JsonData.of(comment_cnt))
    .put("like_cnt", JsonData.of(like_cnt)).build();

final String index = indexPrefix + dt;

Script script = Script.of(s -> s.stored(st -> {
  return st.id("update_wb_content_bhv_let").params(param);
}));

bulkIngester.add(
    op -> op.update(u -> {
      return u.index(index).id(mid).action(a -> {
        return a.script(script).scriptedUpsert(false);
      });
    }));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值