ES多字段聚合取聚合结果

2023-10-30

private Map<String, Long> errorCount(ParamModel paramModel, RestHighLevelClient restHighLevelClient) {
   SearchResponse response = null;
   Map<String, Long> countResult = new HashMap<>();
   try {
      SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
      searchRequest.types(SEARCH_TYPE);
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      //获取开始时间
      long startTime = DateTimeUtil.getTime(paramModel.getDateTime(), paramModel.getTimeFrame());
      //获取结束时间
      long endTime = paramModel.getDateTime();
      //查询条件
      QueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("timestamp").from(new Date(startTime)).to(new Date(endTime))).must(QueryBuilders.matchQuery("level", "ERROR"));
      //统计条件
      TermsAggregationBuilder serviceLineAgg = AggregationBuilders.terms("serviceline_count").field("serviceline");
      TermsAggregationBuilder appNameAgg = AggregationBuilders.terms("appName_count").field("appName");

      searchSourceBuilder.query(query).size(0);
      searchSourceBuilder.aggregation(serviceLineAgg.subAggregation(appNameAgg)).size(0);
      searchRequest.source(searchSourceBuilder);
      response = restHighLevelClient.search(searchRequest);
      //组装数据
      analyticData(response, countResult);

      logger.info(response.toString());
   } catch (IOException e) {
      logger.error(e.getMessage(), e);
   }
//代码聚合的字段为serviceline、appName
private void analyticData(SearchResponse response, Map<String, Long> countResult) {
   Map<String, Aggregation> serviceLineMap = response.getAggregations().asMap();
   ParsedStringTerms serviceLineTerms = (ParsedStringTerms) serviceLineMap.get("serviceline_count");
   List serviceLists = serviceLineTerms.getBuckets();
   for (Object serviceList : serviceLists) {
      ParsedStringTerms.ParsedBucket serviceListObj = (ParsedStringTerms.ParsedBucket) serviceList;
      String serviceLine = serviceListObj.getKeyAsString();
      Map<String, Aggregation> appNameMap = serviceListObj.getAggregations().asMap();
      ParsedStringTerms appNameTerms = (ParsedStringTerms) appNameMap.get("appName_count");
      List appNameLists = appNameTerms.getBuckets();
      for (Object appNameList : appNameLists) {
         ParsedStringTerms.ParsedBucket appNameObj = (ParsedStringTerms.ParsedBucket) appNameList;
         String appName = appNameObj.getKeyAsString();
         Long count = appNameObj.getDocCount();
         countResult.put(serviceLine + "&" + appName, count);
      }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES多字段聚合取聚合结果 的相关文章

  • android 防止反编译的若干方法

    第一种方式 混淆策略 混淆策略是每个应用必须增加的一种防护策略 同时他不仅是为了防护 也是为了减小应用安装包的大小 所以他是每个应用发版之前必须要添加的一项功能 现在混淆策略一般有两种 对代码的混淆 我们在反编译apk之后 看到的代码类名
  • vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题

    vue中父组件异步数据通过props方式传递给子组件 子组件接收不到的问题 问题描述 组件化开发中经常用到父子组件的通信 父传子子传父等数据的操作 如果父组件的数据是发请求从后端获取的异步数据 那么父组件将这个数据传递给子组件的时候 因为是
  • 超详细的 pytest 教程【入门篇】

    前言 关于自动化测试 这些年经历了太多的坑 有被动的坑 也有自己主动挖的坑 在这里做了一些总结 主要思考总结下这些年来自动化测试过程中的一些基本的东西 例如何时进行自动化 如何自动化 或是怎么自动化我们的测试工作 接下来我们先对pytest
  • idea全局搜索失效,Ctrl+shift+F快捷键不起作用

    方法1 是否与搜狗等输入法软件存在快捷键冲突 当然也可能是你新下载的什么软件导致的快捷键冲突导致IDEA全局搜索失效 比如下图 可以改掉输入法的快捷键或者直接关闭输入法的快捷键 这样idea的全局搜索功能就恢复了 方法2 终极办法 如果你一
  • Leetcode 268. 缺失数字(有效利用异或和)

    缺失数字 给定一个包含 0 1 2 n 中 n 个数的序列 找出 0 n 中没有出现在序列中的那个数 示例 1 输入 3 0 1 输出 2 示例 2 输入 9 6 4 2 3 5 7 0 1 输出 8 class Solution publ
  • js 事件发布订阅销毁

    在vue中 通过 on订阅事件 通过 emit触发事件以此可用来事件跨组件传值等功能 但是有个弊端就是通过这种方式订阅的事件可能会触发多次 特别是通过 on订阅的事件中如果有http请求 将会造成触发一次会发出很多同样的http请求 造成资
  • AppZygote是什么?

    众所周知 app进程 SystemServer进程都是由Zygote进程孵化的 最近梳理这块逻辑的时候 无意中发现了一个叫AppZygote和一个叫AppZygoteInit的java类 挺新鲜的 先看看源码开头对AppZygote的定义吧
  • FATFS文件系统详解

    FATFS文件系统详解 文章目录 FATFS文件系统详解 1 简介 2 基础概念 3 FAT文件系统组成介绍 4 FAT文件系统分析 4 1 采用FAT格式格式化SD nand sd卡 4 2 引导扇区分析 4 3 分区偏移及大小计算 4
  • 2019年计算机视觉综述论文汇总

    导读 本文整理了2019年计算机视觉方面的综述论文 包含目标检测 图像分割 含语义 实例分割 目标跟踪 医学图像分割 显著性目标检测 行为识别 深度估计等 可以使读者对相关 目标检测 2019 四大目标检测综述论文 Imbalance Pr
  • Node.js详解(一):基础知识

    文章目录 一 Node js介绍 二 Node js的优势 三 Node js的特点 1 V8虚拟机 2 事件驱动 3 异步 非堵塞I O 四 NodeJS带来的对系统瓶颈的解决方案 1 并发连接 2 I O阻塞 五 NodeJS的优缺点
  • pysot工具使用说明

    pysot tools test py 首先关注pysot的README md 找到Test tracker 按要求进入 tools test py 文件 修改以下参数 windows 环境补充 pass 运行后 The testing r
  • Arduino简单实例之十_舵机

    1 说明 舵机的旋转不像普通电机那样只是转圈圈 它可以根据你的指令旋转到0至180度之间的任意角度然后精准的停下来 常用于控制机器人 舵机的转动的角度是通过调节PWM 脉冲宽度调制 信号的占空比来实现的 需要使用Arduino上的PWM口控
  • 分布式应用:Zookeeper 集群与kafka 集群部署

    目录 一 理论 1 Zookeeper 2 部署 Zookeeper 集群 3 消息队列 4 Kafka 5 部署 kafka 集群 6 Filebeat Kafka ELK 二 实验 1 Zookeeper 集群部署 2 kafka集群部
  • 如何将Postman API测试转换为JMeter以进行扩展

    许多测试工程师使用Postman进行API测试自动化 他们发现端点 发出请求 创建测试数据 运行回归测试 使用Newman等实现API测试的持续集成 但是 Postman有一定的测试限制 希望获得更多负载测试能力的开发人员 DevOps和Q
  • Python实现word简历中图片模糊

    Python实现word简历中照片模糊 保护个人隐私的有效方法 一 引言背景 在现代招聘流程中 电子简历成为了主要的招聘方式之一 然而 简历中包含的个人信息往往涉及隐私问题 特别是照片 为了保护求职者的个人隐私和数据安全 许多招聘平台要求对
  • web前端-vue-router传递多个参数3种方法

    一 GET方法 1 传递值
  • 从键盘输入10个整数,存储到ArrayList集合中,然后遍历查找最大值输出结果。

    package javawork 12 11 import java util public class ArraryList public static void main String args List
  • JSONObject 所需 jar 包

    JSONObject 需要的 jar 包 共 6 个 链接 https pan baidu com s 1DUnEe7eo4iTY0TgEC0bQYg 提取码 ta12
  • Zookeeper安装后启动无反应的问题

    解决办法 首先 Zookeeper在Windows下启动只需要运行zkServer cmd双击即可 需保证运行环境中正确安装了Java运行环境 而zkEnv cmd中为其相关的变量 解决办法 将zkServer cmd中 call JAVA

随机推荐