Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计

文章目录

  • Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计
    • 1.准备数据
    • 2. ES 查询query,filter过滤,结合aggs 聚合统计
      • 2.1 查询命中后,基于查询的数据进行聚合
      • 2.2 基于 filter 过滤后,基于此数据进行聚合
      • 2.3 基于查询query, filter 综合过滤后,基于此数据进行聚合
    • 3 Global bucket 全局bucket统计
      • 3.1 局部bucket统计与全局global bucket统计

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. ES 查询query,filter过滤,结合aggs 聚合统计

2.1 查询命中后,基于查询的数据进行聚合

前面我们讲的所有的聚合操作 都是没有查询的,都是上来直接 aggs 进行 聚合 avg, count, 如果现在我想统计 技术部的人 的平均年龄该如何实现?
实现 某个部门(技术部)的平均年龄的统计,先查询然后基于查询结果进行统计 技术部最大年龄,最小年龄,平均年龄

#query先查询,然后基于查询结果进行统计 max , min, avg
get /testcopy/_search
{"query":{"match_phrase": {"deptName.keyword": "技术部"}},//基于 query平级,进行aggs聚合操作,就是用query结果进行aggs聚合统计"aggs":{"tech_avg_age":{"avg": {"field": "age"}},"max_age":{"max": {"field": "age"}},"min_age":{"min": {"field": "age"}}}
}

查询结果 四个技术部员工, 是再查询出来这四个员工的 基础上 再次进行的统计分析
技术部 max age:30, min age:19, avg age:24.75

2.2 基于 filter 过滤后,基于此数据进行聚合

上面我们讲了 基于 query的数据 进行 aggs 统计分析, 那是否能和 filter 结合来进行过滤呢? 当然可以!

实现 过滤 年龄在 (25,60)之间的人, 然后 基于这部分数据进行 平均年龄的统计

# 过滤 filter 过滤 25-40的人,然后 基于过滤结果进行统计  avg
get /testcopy/_search
{"query":{"bool": {"filter": [{"range": {"age": {"gte": 25,"lte": 40}}}]}},"aggs":{"avg_age":{"avg": {"field": "age"}}}
}

查询过滤 结果 6个技术部员工, 基于过滤基础之上 再次进行的统计分析, 得出平均年龄 32.66

2.3 基于查询query, filter 综合过滤后,基于此数据进行聚合

上面我们讲了 基于 query的数据 进行 aggs 统计分析, 那是否能和 filter 结合来进行过滤呢? 基于 查询, 过滤后的数据进行统计分析 能否可行?
当然可以!

实现 查询 技术部 过滤 年龄在 (25,60)之间的 :武汉的 然后 基于这部分数据进行 平均年龄的统计

#query先查询,然后 filter 过滤 25-60的人,然后 基于查询过滤结果进行统计  avg
get /testcopy/_search
{"query":{"bool": {"must": [{"match": {"deptName.keyword": "技术部"}}],//must 平级 进行filter 过滤"filter": [{"range": {"age": {"gte": 25,"lte": 60}}}]}},//query 结束, 平级 基于query查询过滤结果 进行 aggs"aggs":{"avg_age":{"avg": {"field": "age"}}}
}

查询过滤 结果 2个技术部员工, 基于基础之上 再次进行的统计分析, 得出平均年龄 30

3 Global bucket 全局bucket统计

3.1 局部bucket统计与全局global bucket统计

比如 现在 我想 部门的平均年龄和 所有整个公司的人的平均年龄的 来做对比,应该如何实现?分两次查询先查部门,然后查全部么,最后再做对比? 太麻烦了

  • 不是这样子的,ES提供了 global参数 来控制 全局统计, global定义了一个全局桶bucket
  • Global 忽略查询条件, 直接对所有document 数据进行统计
    场景:
    实现 某个部门的平均年龄和整个doc的平均年龄 的统计
#global:{} 在aggs 的分组名字内部, 就是忽略上面的查询条件, 进行全局统计
get /testcopy/_search
{"size":0,"query":{"match": {"deptName.keyword": "技术部"}},"aggs":{"tech_avg":{"avg": {"field": "age"}},//aggs内部 tech_avg 平级 进行全局统计 global bucket"all_avg_age":{"global": {},"aggs": {"all_of_age": {"avg": {"field": "age"}}}}}
}

查询结果 global 统计了11个doc, 然后 平均年龄30.45
单个技术部 有 4条数据doc,平均年龄是 24.75


至此 我们已经学习了 查询query,filter过滤,结合aggs 进行局部/全局聚合统计的基本用法,实现了 查询 query, filter过滤 及 融合aggs进行统计分析,及对比 局部/全局 global aggs 聚合统计, 下一篇,我们介绍下 TOP N 排名推荐

Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计相关推荐

  1. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

  2. Elasticsearch实战(五)---高级搜索 Match/Match_phrase/Term/Must/should 组合使用

    Elasticsearch实战-Match/Match_phrase/term/filter 及Must should 组合并列使用 文章目录 Elasticsearch实战-Match/Match_ ...

  3. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...

  4. 实训二十五: 使用 ACL 过滤特定病毒报文配置

    一.实验目的 1. 了解常见病毒如冲击波.震荡波的端口: 2. 了解如何使用 ACL 的进行过滤: 二.应用环境 1.冲击波.震荡波曾经给网络带来很沉重的打击,到目前为止,整个 internet 中还 ...

  5. [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影

    一.学习目标 了解了直方图反向投影的一般流程 了解2D直方图的使用 如有错误欢迎指出~ 二.了解直方图反向投影 2.1 了解2D直方图 需要对直方图进行反向投影,需要使用2D直方图.2D直方图需要使用 ...

  6. 在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能

  7. ElasticSearch实战(五)-FST有限状态转换算法(索引数据压缩算法)

    Lucene使用FST算法以字节的方式来存储所有的Term,重复利用Term Index的前缀和后缀,使Term Index小到可以放进内存,减少存储空间,不过相对的也会占用更多的cpu资源.FST在 ...

  8. 2020年第十五届竞赛数据上报竞赛数据给高等教学学会统计

    ▌01 相关的通知 全国高校大学生竞赛质量提升工作推进会 高校竞赛排行榜主办方数据上传 操作手册 ▌02 信息处理 1.原始资料文件 资料所在目录: E:\SmartCar\2020比赛\Docume ...

  9. ElasticSearch实战系列十一: ElasticSearch错误问题解决方案

    前言 本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法. ElasticSearch环境安装问题 1,max virtual memory areas vm.max_ma ...

最新文章

  1. android 一周日历,(Android)获取一周的第一天
  2. WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数...
  3. 电商搜索能力解读-实体识别(NER)
  4. 世界上没有一模一样的东西_世界上存在两根同时点燃同时燃尽一模一样的蜡烛吗?...
  5. [Java基础]Lambda表达式的注意事项
  6. 工作295:发布逻辑处理
  7. java学习(38):数组排序(直接排序)
  8. 云南干旱 谁人受损 心有戚戚 愤怒哀伤
  9. java集合转js数值_前端js调用接口转换Map数组数据
  10. 华为机试——字串的连接最长路径查找
  11. 机器人驾驶的神经网络愿景(上)
  12. IE8兼容placeholder
  13. 水下清淤机器人_水下清淤机器人启用,箱涵清淤有了新招数~
  14. Excel键盘快捷键大全
  15. 浏览器屏蔽百度推广广告
  16. 计算机组成原理学习 笔记三
  17. 小白篇:阿里云 对象存储 OSS
  18. IOS塔防游戏《坦克对大炮》的开发设计记录
  19. Firefox的安装
  20. B2B企业供应链协同系统解决方案:搭建在线采购交易、数据网络化的协同办公系统

热门文章

  1. 和水花的100天(20211223 Week51-2)
  2. 发力小程序社交电商,礼物说完成C1轮1亿人民币融资
  3. 租房小程序开发的主要功能
  4. 数据结构3_160805无头单向不循环
  5. python人工智能课程设计_中小学课程设计:以计算思维培养为核心的人工智能课程设计与实践...
  6. 自动化连接远程服务器并执行指令
  7. CVPR2019中关于超分辨率算法的16篇论文
  8. ARCGIS中按照某字段属性批量导出shp ,即将一个shp图层分割成单个的shp
  9. 智汀教你如何用手机远程控制智能门锁
  10. efi linux win10,WIN10+UBUNTU15.04 kylin(EFI+GPT)