一、需求

A、B、C代表3个用户,第二列代表各自的得分,求A、B、C的最好成绩以及A、B、C最好成绩的均值

A 10
A 11
A 13
B 11
B 11
B 12
C 10
C 10
C 11
C 15

二、思路

先terms分组,求最大值,最后加一个pipeline均值。一开始想用bucket_script解决,实验发现走不通,但是bucket_script在聚合结果之上操作很有用

三、测试数据

PUT sport
{
  "mappings": {
    "grade": {
      "properties": {
        "user": {
          "type": "keyword"
        },
        "grade":{
          "type": "integer"
        }
      }
    }
  }
}

PUT sport/grade/1
{
  "user":"A",
  "grade":10
}

PUT sport/grade/2
{
  "user":"A",
  "grade":11
}

PUT sport/grade/3
{
  "user":"A",
  "grade":13
}

PUT sport/grade/4
{
  "user":"B",
  "grade":11
}
PUT sport/grade/5
{
  "user":"B",
  "grade":11
}

PUT sport/grade/6
{
  "user":"B",
  "grade":12
}

PUT sport/grade/7
{
  "user":"C",
  "grade":10
}

PUT sport/grade/8
{
  "user":"C",
  "grade":10
}

PUT sport/grade/9
{
  "user":"C",
  "grade":11
}

PUT sport/grade/10
{
  "user":"C",
  "grade":15
}

四、聚合

GET sport/_search
{
  "size": 0,
  "aggs": {
    "avg_score": {
      "terms": {
        "field": "user"
      },
      "aggs": {
        "max_score": {
          "max": {
            "field": "grade"
          }
        }
      }
    },
    "avg_max_score": {
      "avg_bucket": {
        "buckets_path": "avg_score>max_score"
      }
    }
  }
}

结果:

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 10,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "avg_score": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "C",
          "doc_count": 4,
          "max_score": {
            "value": 15
          }
        },
        {
          "key": "A",
          "doc_count": 3,
          "max_score": {
            "value": 13
          }
        },
        {
          "key": "B",
          "doc_count": 3,
          "max_score": {
            "value": 12
          }
        }
      ]
    },
    "avg_max_score": {
      "value": 13.333333333333334
    }
  }
}

elasticsearch聚合案例--分组、求最大值再求最大值的均值的更多相关文章

  1. 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值

    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...

  2. 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...

  3. 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...

  4. ES 24 - 如何通过Elasticsearch进行聚合检索 (分组统计)

    目录 1 普通聚合分析 1.1 直接聚合统计 1.2 先检索, 再聚合 1.3 扩展: fielddata和keyword的聚合比较 2 嵌套聚合 2.1 先分组, 再聚合统计 2.2 先分组, 再统 ...

  5. 在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max——猎八哥fly

    在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max. 思路:将a中的数组两两相加,组成一个新的数组.并将新的数组和a数组进行sort排序.然后将a数组从大到小与新数组比较,如 ...

  6. 【C语言】不使用大小于号,求出两数最大值

    //不使用大小于号,求出两数最大值 #include <stdio.h> #include <math.h> double Max(double a, double b) { ...

  7. python 可变数量参数 ( 多参数返回求 参数个数,最大值,最大值)

    一. 自定义一串数字求 参数个数,最大值,最大值()---------方法一: def max(*a): m=a[0] p=a[0] n=0 for x in a: if x>m: m=x n+ ...

  8. POJ 1887:Testing the CATCHER 求递减序列的最大值

    Testing the CATCHER Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16131   Accepted: 5 ...

  9. spark求相同key的最大值

    需求: 求相同key的最大值  [("a", 3),  ("a", 2),  ("a", 5),  ("b", 5),  ...

随机推荐

  1. 与进程相关的命令ps、kill

    一.概述 Ubuntu中主要有如下操作进程的命令 二.进程查看命令 ps 2.1 ps –l PPID:父进程的 PID PID:进程的PID S:进程状态,S:是指sleep睡眠状态:T:是挂起状态 ...

  2. HDU - 6437 Problem L.Videos 2018 Multi-University Training Contest 10 (最小费用最大流)

    题意:M个影片,其属性有开始时间S,结束时间T,类型op和权值val.有K个人,每个人可以看若干个时间不相交的影片,其获得的收益是这个影片的权值val,但如果观看的影片相邻为相同的属性,那么收益要减少 ...

  3. 关于Python字符编码encode和decode

    (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 记得几天前,部门的一个小姑娘问我,怎么她Python打印出来的中文信息都乱码了?我走过去,略思一二,瞬间给她搞定,其实这是字 ...

  4. 优秀 H5 案例收集 Vol.2(不定期更新)

    上期浏览:Vol.1 再见了,影史最性感的硬汉http://news.163.com/special/fdh5_wolverine/ 活出真我http://balfhcy.pernod-ricard- ...

  5. pt-osc使用方法

    pt-osc实战运用 1.安装pt-osc,解压即可用 安装包在:10.135.2.217:data/online/software/percona-toolkit-3.0.12.tar.gz tar ...

  6. 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴

    实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...

  7. Mysql导出数据结构 or 数据

    如果我们单单只想导出mysql数据表结构,通过navcat工具还不行,这时我们可以用mysqldump工具 在mysql server的安装目录:C:\Program Files\MySQL\MySQ ...

  8. idea调节字体大小

    这是调节前的 这是调节后的 步骤

  9. I方法怎么不能获取多选框的数据

    前端代码 <input type="checkbox" name="m_name" value="{$vo.name}" class ...

  10. RabbitMQ 简单了解以及使用

    RabbitMQ 开发语言:Erlang – 面向并发的编程语言. AMQP:是消息队列的一个协议. mysql 是 java 写的吗?不是 那么 java 能不能访问?可以,则通过(驱动)协议;那么 ...