Elasticsearch实战(十四)---聚合搜索Aggs多层嵌套聚合处理

2023-11-12

Elasticsearch实战- -聚合搜索Aggs多层分组嵌套 统计处理

1.准备数据
POST /testcopy/_bulk
{"index":{"_id": 1}}
{"empId" : "111","name" : "员工1","age" : 20,"sex" : "男","mobile" : "19000001111","salary":1333,"deptName" : "技术部","provice" : "湖北省","city":"武汉","area":"光谷大道","address":"湖北省武汉市洪山区光谷大厦","content" : "i like to write best elasticsearch article"}
{"index":{"_id": 2}}
{"empId" : "222","name" : "员工2","age" : 25,"sex" : "男","mobile" : "19000002222","salary":15963,"deptName" : "销售部","provice" : "湖北省","city":"武汉","area":"江汉区","address" : "湖北省武汉市江汉路","content" : "i think java is the best programming language"}
{"index":{"_id": 3}}
{ "empId" : "333","name" : "员工3","age" : 30,"sex" : "男","mobile" : "19000003333","salary":20000,"deptName" : "技术部","provice" : "湖北省","city":"武汉","area":"经济技术开发区","address" : "湖北省武汉市经济开发区","content" : "i am only an elasticsearch beginner"}
{"index":{"_id": 4}}
{"empId" : "444","name" : "员工4","age" : 20,"sex" : "女","mobile" : "19000004444","salary":5600,"deptName" : "销售部","provice" : "湖北省","city":"武汉","area":"沌口开发区","address" : "湖北省武汉市沌口开发区","content" : "elasticsearch and hadoop are all very good solution, i am a beginner"}
{"index":{"_id": 5}}
{ "empId" : "555","name" : "员工5","age" : 20,"sex" : "男","mobile" : "19000005555","salary":9665,"deptName" : "测试部","provice" : "湖北省","city":"高新开发区","area":"武汉","address" : "湖北省武汉市东湖隧道","content" : "spark is best big data solution based on scala ,an programming language similar to java"}
{"index":{"_id": 6}}
{"empId" : "666","name" : "员工6","age" : 30,"sex" : "女","mobile" : "19000006666","salary":30000,"deptName" : "技术部","provice" : "武汉市","city":"湖北省","area":"江汉区","address" : "湖北省武汉市江汉路","content" : "i like java developer"}
{"index":{"_id": 7}}
{"empId" : "777","name" : "员工7","age" : 60,"sex" : "女","mobile" : "19000007777","salary":52130,"deptName" : "测试部","provice" : "湖北省","city":"黄冈市","area":"边城区","address" : "湖北省黄冈市边城区","content" : "i like elasticsearch developer"}
{"index":{"_id": 8}}
{"empId" : "888","name" : "员工8","age" : 19,"sex" : "女","mobile" : "19000008888","salary":60000,"deptName" : "技术部","provice" : "湖北省","city":"武汉","area":"汉阳区","address" : "湖北省武汉市江汉大学","content" : "i like spark language"}
{"index":{"_id": 9}}
{"empId" : "999","name" : "员工9","age" : 40,"sex" : "男","mobile" : "19000009999","salary":23000,"deptName" : "销售部","provice" : "河南省","city":"郑州市","area":"二七区","address" : "河南省郑州市郑州大学","content" : "i like java developer"}
{"index":{"_id": 10}}
{"empId" : "101010","name" : "张湖北","age" : 35,"sex" : "男","mobile" : "19000001010","salary":18000,"deptName" : "测试部","provice" : "湖北省","city":"武汉","area":"高新开发区","address" : "湖北省武汉市东湖高新","content" : "i like java developer i also like  elasticsearch"}
{"index":{"_id": 11}}
{"empId" : "111111","name" : "王河南","age" : 61,"sex" : "男","mobile" : "19000001011","salary":10000,"deptName" : "销售部",,"provice" : "河南省","city":"开封市","area":"金明区","address" : "河南省开封市河南大学","content" : "i am not like  java "}
{"index":{"_id": 12}}
{"empId" : "121212","name" : "张大学","age" : 26,"sex" : "女","mobile" : "19000001012","salary":1321,"deptName" : "测试部",,"provice" : "河南省","city":"开封市","area":"金明区","address" : "河南省开封市河南大学","content" : "i am java developer  thing java is good"}
{"index":{"_id": 13}}
{"empId" : "131313","name" : "李江汉","age" : 36,"sex" : "男","mobile" : "19000001013","salary":1125,"deptName" : "销售部","provice" : "河南省","city":"郑州市","area":"二七区","address" : "河南省郑州市二七区","content" : "i like java and java is very best i like it do you like java "}
{"index":{"_id": 14}}
{"empId" : "141414","name" : "王技术","age" : 45,"sex" : "女","mobile" : "19000001014","salary":6222,"deptName" : "测试部",,"provice" : "河南省","city":"郑州市","area":"金水区","address" : "河南省郑州市金水区","content" : "i like c++"}
{"index":{"_id": 15}}
{"empId" : "151515","name" : "张测试","age" : 18,"sex" : "男","mobile" : "19000001015","salary":20000,"deptName" : "技术部",,"provice" : "河南省","city":"郑州市","area":"高新开发区","address" : "河南省郑州高新开发区","content" : "i think spark is good"}
2.分组嵌套查询及count,avg操作
2.1 以部门分组,求部门avg年龄,且部门内以省分组,省平均年龄,且 order by 每个省 avg年龄

这次的 嵌套分组 和上一篇文章的 Elasticsearch实战(十三)—聚合搜索Aggs聚合及Count,Avg操作 中的 3.3 嵌套分组内avg有什么区别?
之前文章是 先以部门 分组, 然后以 省份 分组, 统计 每个部门内,每个省份的人的 平均年龄,只求了一次平局年龄
aggs 是在terms 平级 开始操作 , 只有一个平均年龄就是 部门内省份内的1个平均年龄

之前文章是  先以部门 分组, 然后以 省份 分组,  统计 每个部门内,每个省份的人的 平均年龄,只求了一次平局年龄, 没有求 部门的平均年龄
1.先分组 部门 deptName
2.在分组 省份 provice
3.然后在省份内 aggs 统计avg年龄

{
  "size":0,
  "aggs":{
    "group_dept":{
      "terms": {
        "field": "deptName.keyword",
        "size": 10
      },
      //dept分组内 term结束 就开始组内嵌套分组
      "aggs": {
        "group_provice": {
          "terms": {
            "field": "provice.keyword",
            "size": 10
          },
          //provice分组内 term结束 就开始统计avg
          "aggs": {
            "provice_avg_age": {
              "avg": {
                "field": "age"
              }
            }
          }
        }
      }
    }
  }
}

之前的查询结果
在这里插入图片描述

这次呢? 不仅要统计 内层的avg 年龄,我还要统计外层的 部门内的 avg年龄,做了两次avg
部门分组, 求avg, 组内再分组 省份, 再求avg

#本次查询不是 基于组内 再进行 aggs ,而是 直接再 dept_avg_age 部门求平均年龄 平级 直接进行group_provice 省份分组
#然后在省份分组的 term平级 进行 aggs 进行 provice_avg_age 省内平均年龄

get /testcopy/_search
{
  "size":0,
  "aggs":{
    "group_dept":{
      "terms": {
        "field": "deptName.keyword",
        "size": 10,
        "order": {
          "dept_avg_age": "desc"
        }
      },
      //dept分组 terms结束 直接aggs先求dept avg年龄
      "aggs": {
        "dept_avg_age": {
          "avg": {
            "field": "age"
          }
        },
        //求完 dept avg age,dept_avg_age 同级别 直接并列分组名字,以provice分组
        "group_provice":{
          "terms": {
            "field": "provice.keyword",
            "size": 10,
            "order": {
              "provice_avg_age": "desc"
            }
          },
          //group provice内部 ,terms结束 直接aggs 求provice avg年龄
          "aggs": {
            "provice_avg_age": {
              "avg": {
                "field": "age"
              }
            }
          }
        }
      }
    }
  }
}

本次查询结果
在这里插入图片描述

2.2 aggs并列实现多次查询,求不同部门的 max, min,sum,avg 四个统计

求每个部门的 人数 的最大年龄,最小年龄, 年龄综合,平均年龄, aggs平级可以多个聚合种类 比如 max,min,sum,avg等

#aggs平级 四个名字,一次性做四次分组
get /testcopy/_search
{
  "size":0,//不展示原始数据
  "aggs":{
    "group_dept":{
      "terms": {
        "field": "deptName.keyword",
        "size": 10
      },
      //group分组内 term平级 进行 统计 max,min,sum,avg
      "aggs": {
        "max_age": {
          "max": {
            "field": "age"
          }
        },
        //aggs内 max分组名称 平级 开始 min分组名称
        "min_age":{
          "min": {
            "field": "age"
          }
        },
        //aggs内 max,min 分组名称 平级 开始 sum分组名称
        "sum_age":{
          "sum": {
            "field": "age"
          }
        },
        //aggs内 max,min,sum 分组名称 平级 开始 avg分组名称
        "avg_age":{
          "avg": {
            "field": "age"
          }
        }
      }
    }
  }
}

查看结果
技术部 4人 max:30, avg:24.75, sum:99,min:19
销售部 4人 max:40, avg:30.25, sum:121,min:20
在这里插入图片描述


至此 我们已经学习了 聚合搜索 aggs 的基本用法,嵌套分组查询的多种用法及之前 分组查询的对比, 下一篇,我们介绍下 如何把 查询query,filter过滤,结合aggs 进行局部/全局聚合统计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch实战(十四)---聚合搜索Aggs多层嵌套聚合处理 的相关文章

随机推荐

  • Linux中的$0、$1、$@、$?、$*等特殊变量介绍

    特殊变量 是传给脚本的参数个数 0 是脚本本身的名字 1 是传递给该shell脚本的第一个参数 2 是传递给该shell脚本的第二个参数 是传给脚本的所有参数的列表 是以一个单字符串显示所有向脚本传递的参数 与位置变量不同 参数可超过9个
  • Invalid prop: type check failed for prop “data“. Expected Array, got Object[已解决]

    Vue warn Invalid prop type check failed for prop data Expected Array got Object 要处理这个bug就必须先明白这个bug到底是什么类型是怎么一回事 那字面意思就是
  • Mirai环境搭建

    20200805 引言 关于Mirai的环境搭建 我记得能搜到很多结果 不过我当时并没有想要启动mirai的所有功能 毕竟其实他的代码也有缺陷 现在想扫出来结果也有点难了 后面可能还是需要这些功能来辅助扫描结果 其他功能还是要开启 这里先记
  • C语言基础_文件操作-1

    目录 写在前面 学习目标 学习总结 正文 1 文件打开 关闭 2 getc putc 3 fprintf fscanf gets不安全 用fgets 4 fgets gputs 5 文件光标操作 a fseek ftell long范围内操
  • C++语言分号的使用

    C 语言中 表达式的一部分能够组成独立的语句 所以必须加分号分割 c a b 成立 c a b 也成立 if 1 1 do something 成立 if 1 1 do something 也成立 class foo bar 成立 含义为独
  • c++能不能给类的成员变量在声明的时候初始化?

    能 可能早先的版本不能 但是c 11标准下能 有人说在声明的时候初始化相当于在构造函数中初始化 其实不是的 成员变量初始化的顺序为 先进行声明时初始化 然后进行初始化列表初始化 最后进行构造函数初始化 如下代码 另外初始化列表中初始化的顺序
  • STM32启动BOOT0 BOOT1设置方法

    转载自 https www jianshu com p 38c4a90bac19 不同的下载方式对应STM32启动方式也不同 如下图是STM32三种启动方式 第一种启动方式是最常用的用户FLASH启动 正常工作就在这种模式下 STM32的F
  • webpack4 sideEffects实战轻松搞懂

    sideEffects 译作副作用 函数副作用是指函数在正常工作任务之外对外部环境所施加的影响 具体地说 函数副作用是指函数被调用 完成了函数既定的计算任务 但同时因为访问了外部数据 尤其是因为对外部数据进行了写操作 从而一定程度地改变了系
  • Vue的过渡

    目录 单元素过渡 1 css过渡 2 过渡的类名介绍 3 CSS动画 4 自定义过渡的类名 5 元素过渡使用JavaScript钩子函数 多元素过渡 1 基础用法 2 key属性 3 过渡模式 多组件过渡 列表过渡 单元素过渡 1 css过
  • Android Zebra斑马打印机 打印面单不清楚 解决方法

    刚开始的效果 字体模糊 分析原因 1 打印机的打印浓度太低 2 文本字体不对 3 bitmap的问题 因为这个面单是通过view 获取到bitmap再喂给打印机打印的 下载打印机的驱动 设置打印机打印浓度 没有效果 调整字体类型没有效果 分
  • Java 加解密技术系列之 SHA

    序 上一篇文章中介绍了基本的单向加密算法 MD5 也大致的说了说它实现的原理 这篇文章继续之前提到的单向加密 主要讲的是 SHA 同 MD5 一样 SHA 同样也是一个系列 它包括 SHA 1 SHA 224 SHA 256 SHA 384
  • 服务器怎么开虚拟用户,Linux文件服务器实战详解(虚拟用户)

    vsftpd基于系统用户访问ftp服务器 系统用户越多越不利于管理 不利于系统安全 这样就以vsftp虚拟防护的方式来解决 虚拟用户没有实际的真实系统用户 而是通过映射到其中一个真实用户以及设置相应权限来访问验证 虚拟用户不能登陆系统 1
  • android项目迁移到androidX:类映射(android.support.design*)

    支持库类 AndroidX 类 android support design animation AnimationUtils com google android material animation AnimationUtils and
  • 01. 实现登录功能的UI自动化测试脚本

    在软件开发过程中 登录功能是一个非常重要且常见的功能 为了确保登录功能的稳定性和正确性 我们可以利用UI自动化测试来自动验证登录流程 本文将介绍如何编写一个登录功能的UI自动化测试脚本 并通过使用Selenium和pytest库实现自动化测
  • rbf神经网络预测matlab_MATLAB 基于灰色神经网络的预测算法研究—订单需求预测...

    点击上方蓝字关注 公众号 MATLAB 神经网络变量筛选 基于BP的神经网络变量筛选 灰色系统理论是一种研究少数据 贫信息 不确定性问题的新方法 它以部分信息已知 部分信息未知的 小样本 贫信息 不确定系统为研究对象 通过对 部分 已知信息
  • aot类型的自定义算子能编译成功,也能被调用,但运行时报错(官网leakyrelu示例)

    环境 mindspore gpu 2 0 cuda 11 1 代码 执行到这行报错 报错 解答 根据日志我们可以看到是dlopen失败 该行日志对应的完整截图信息 需要查看日志里的error message以进一步定位原因
  • 自动刷新网页代码(可多个网页)

    前言 在我们的日常工作中 有时候会遇到这种需求 就是需要不停的刷新当前页面 看看是否有变化 但是又不想手动去刷新 当然了 在浏览器的开发者工具里面点击拓展 会发现有一些现成的工具 但是不一定好用 而且很难同时刷新多个网页 因此本篇博客利用p
  • 基于多点通信的PtoP聊天程序

    import java io InputStream import java io OutputStream import java util Hashtable import javax microedition io Connector
  • button按钮组件VM359:1 Component "pages/index/index" does not have a method "btnClick" to handle event "t

    设置按钮组件事件bindtap 仅在wxml中定义但未在js文件中写响应函数就会导致这种情况 VM359 1 Component pages index index does not have a method btnClick to ha
  • Elasticsearch实战(十四)---聚合搜索Aggs多层嵌套聚合处理

    Elasticsearch实战 聚合搜索Aggs多层分组嵌套 统计处理 文章目录 Elasticsearch实战 聚合搜索Aggs多层分组嵌套 统计处理 1 准备数据 2 分组嵌套查询及count avg操作 2 1 以部门分组 求部门av