最近再做kafka日志消息解析后写入Es的需求,遇到一个特殊需求,需要按照sku维度对日志进行处理,以sku为唯一键,Es中存在则更新Document记录中的热度值(新热度值=原记录热度值+预更新的热度值),不存在则直接新增。
下面为批量处理代码:
public void upsertHotValue(List<GoodsHotValueType> list){
if (CollectionUtils.isEmpty(list)) {
return;
}
log.info("upsert hotValue:{}", list);
Client client = elasticsearchTemplate.getClient();
//批量更新对象集合
BulkRequestBuilder bulkRequest = client.prepareBulk();
for (GoodsHotValueType t : list) {
Map<String, Object> params = Maps.newHashMapWithExpectedSize(8);
params.put("sku", t.getSku());
params.put("updateTime", DateTimeUtil.getDateTime(new Date()));
params.put("hotValue", t.getHotValue());
//创建更新字段脚本
Script script = new Script(ScriptType.INLINE,"