在实时流中接数据需要这样的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);
});
}));