目录
数据流程图和关系
数据流程图
数据流程关系
需求描述
框架和版本
方案一
说明
问题
方案二
说明
数据同步问题
es 查询问题
方案三
说明
es 查询问题
方案四(选择方案)
说明
es 查询问题
需求中设计到的字段说明(网点: scanNetworkCode : 快递单号:waybillId )
Array 官网学习资料: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/array.html
方案1: 先查询,然后把查询结果和新数据合并成新的数组再插入
问题:查询过程需要网络请求和返回,比较耗时,没有查询过程,flink TPS可以达到 2w,反之则只有1000 TPS 左右
方案2: painless 脚本更新
SendBean bean = (SendBean) objData; Map<String, Object> map = new HashMap(); map.put("send", bean.toJSONObject()); map.put("scanNetworkCode", bean.getScanNetworkCode()); String scriptStr = "if (ctx._source.send == null) {ctx._source.send= []} def isCon=0;for(def i=0;i<ctx._source.send.length;i++){if(ctx._source.send[i].scanNetworkCode==params.scanNetworkCode){isCon=1}}if(isCon==0){ctx._source.send.add(params.send)}"; Script inline = new Script(ScriptType.INLINE, "painless", scriptStr, map); updateRequest.script(inline) ; indexer.add(updateRequest);painless 官网学习资料:https://www.elastic.co/guide/en/elasticsearch/painless/6.8/painless-contexts.html
es Arrary和nested的区别: https://blog.csdn.net/laoyang360/article/details/82950393
nested 官网学习资料: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/nested.html
问题1: 过滤的时候,扩大了数据范围 (可以解决)
问题2: 聚合的时候 ,扩大了数据聚合范围 (不能解决)
join 官网学习资料: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/parent-join.html
