ES的聚合:

Metrics 简单的对过滤出来的数据集进行avg,max等操作,是一个单一的数值。
bucket 可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些小数据集上

metric很像SQL中的avg、max、min等方法,而bucket就有点类似group by

导入数据汽车销售数据:

curl -XPOST http://hadoop01:9200/cars/transactions/_bulk -d '
{ "index": {}}
{ "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
'

1:Bucket

1.1:按时间统计(date_histogram时间直方图聚合)

date_histogram是专门用来给时间格式的数据进行聚合的

时间字段sold按照月份统计:

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "agg_time" : {   #给聚合的字段起名字
           "date_histogram" : {  #聚合方式,区间上支持了日期的表达式

               "field" : "sold",
               "interval": "month"
            }
        }
  }
}'

1.2:返回价格区间柱形图(histogram直方图聚合)

统计区间的price值,看他落在那个区间,数据间隔是5000

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "prices" : {
           "histogram" : {
               "field" : "price",
               "interval" : 5000
          }
      }
  }
}'

1.3:查看每种颜色的销量

curl -XPUT 'hadoop01:9200/cars/_mapping/transactions' -d  '  
{
  "properties": {
    "color": {
      "type": "text",
      "fielddata": true
    }
  }
}'

Fielddata:会把字段加载到内存中,在聚合的时候,通过内存可以找到这个字段,否则聚合出错(Fielddata缓存数据的大小是无限制的,不要把无关的数据也缓存起来

GET /cars/transactions/_search?pretty
{

   "aggs" : {

       "agg-color" : {     #聚合的名称(自定义)

           "terms" : { "field" : "color" }

      }

  }

}

2:Metric

metric很像SQL中的avg``、max、min等方法,而bucket就有点类似group by

metric的聚合按照值的返回类型可以分为两种:单值聚合 和 多值聚合

2.1:单值聚合

2.1.1: sum求和

例子:求cars索引中,所有汽车订单的销售总额

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "genres" : {
           "sum" : { "field" : "price" }
      }
  }
}'
2.1.2: Min最小值

例子:求cars索引中price值最小的

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "genres" : {
           "min" : { "field" : "price" }
      }
  }
}'
2.1.3: max最大值

求cars索引中price的最大值:

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "genres" : {
           "max" : { "field" : "price" }
      }
  }
}'
2.1.4: avg求平均值

求cars索引中price价格的平均值

curl -XGET 'hadoop01:9200/cars/transactions/_search?pretty' -d '
{
   "aggs" : {
       "genres" : {
           "avg" : { "field" : "price" }
      }
  }
}'

3:多值聚合

导入数据:

curl -XPOST http://hadoop01:9200/sanguo/dahan/_bulk -d '
{ "index": {}}
{ "studentNo" : 1, "name" : "刘备", "male" : "男", "age" : 24 , "birthday" : "1985-02-03" , "classNo" : 1 , "address" : "湖南省长沙市" , "isLeader" : true}
{ "index": {}}
{ "studentNo" : 2, "name" : "关羽", "male" : "男", "age" : 22 , "birthday" : "1987-08-23" , "classNo" : 2, "address" : "四川省成都市" , "isLeader" : false}
{ "index": {}}
{ "studentNo" : 3, "name" : "糜夫人", "male" : "女", "age" : 19 , "birthday" : "1990-06-12" , "classNo" : 1 , "address" : "上海市" , "isLeader" : false}
{ "index": {}}
{ "studentNo" : 4, "name" : "张飞", "male" : "男", "age" : 20 , "birthday" : "1989-07-30" , "classNo" : 3 , "address" : "北京市" , "isLeader" : false}
{ "index": {}}
{ "studentNo" : 5, "name" : "诸葛亮", "male" : "男", "age" : 18 , "birthday" : "1992-04-27" , "classNo" : 2 , "address" : "江苏省南京市" , "isLeader" : true}
{ "index": {}}
{ "studentNo" : 6, "name" : "孙尚香", "male" : "女", "age" : 16 , "birthday" : "1994-05-21" , "classNo" : 3 , "address" : "广东省深圳市" , "isLeader" : false}
{ "index": {}}
{ "studentNo" : 7, "name" : "马超", "male" : "男", "age" : 19 , "birthday" : "1991-10-20" , "classNo" : 1 , "address" : "黑龙江省哈尔滨市" , "isLeader" : false}
{ "index": {}}
{ "studentNo" : 8, "name" : "赵云", "male" : "男", "age" : 23 , "birthday" : "1986-10-26 " , "classNo" : 2 , "address" : "浙江省杭州市" , "isLeader" : false}
'

3.1:stats 统计

统计查询,一次性统计出某个字段上的常用统计值

curl -XPOST "hadoop01:9200/sanguo/dahan/_search?pretty" -d '
{
 "aggs": {
   "stats_age": {
     "stats": {
       "field": "age"
    }
  }
}
}
'

Stats可以把min、max、avg、sum全部展现出来

3.2:Top hits Aggregation

取符合条件的前n条数据记录,就是SQL中所谓的分组取topN操作

例子:查询sanguo索引中年龄age前3名的姓名和年龄

select name , age from table order by age desc limit 3

curl -XPOST "hadoop01:9200/sanguo/dahan/_search?pretty" -d '
{
"aggs": {
"top_age": {
"top_hits": {
"sort": [
{
"age": {
"order": "desc"
}
}],
"_source": {
"include": [
"name",
"age"
]
},
"size":
}
}
}
}
'

3.3:嵌套使用

聚合操作是可以嵌套使用的, 通过嵌套,可以使得metric类型的聚合操作作用在每一“桶”上。我们可以使用ES的嵌套聚合操作来完成稍微复杂一点的统计功能

例如:查询sanguo索引中每个classNo中年龄最大的

select name , age from table gruop by classNo order by age limit 1

curl -XPOST "hadoop01:9200/sanguo/dahan/_search?pretty" -d '
{
"aggs": {
"m": {
"terms": {
"field": "classNo"
},
"aggs": {
"max_age": {
"max": {
"field": "age"
}
}
}
}
}
}
'

Elasticsearch的聚合操作的更多相关文章

  1. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

  2. ElasticSearch 学习记录之ES几种常见的聚合操作

    ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...

  3. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg

    分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...

  4. 04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作

        前面大概了解了一下elasticsearch的数据存储和数据的查询.现在学习一下,es的复杂操作.     官网相关文档地址:https://www.elastic.co/guide/en/e ...

  5. Elasticsearch聚合操作报错解决办法

    1. 当根据一个类型为text的字段idc进行聚合操作时,查询语句如下: { "aggs": { "top_10_states": { "terms& ...

  6. ElasticSearch 的 聚合(Aggregations)

    Elasticsearch有一个功能叫做 聚合(aggregations) ,它允许你在数据上生成复杂的分析统计.它很像SQL中的 GROUP BY 但是功能更强大. Aggregations种类分为 ...

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

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

  8. Elasticsearch(8) --- 聚合查询(Metric聚合)

    Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...

  9. Elasticsearch(9) --- 聚合查询(Bucket聚合)

    Elasticsearch(9) --- 聚合查询(Bucket聚合) 上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metri ...

随机推荐

  1. mysql数据库问题———登录进去无法操作显示You must reset your password using ALTER USER statement before executing this statement

    linux操作mysql数据库,可以登陆进去,但是操作所有命令都显示You must reset your password using ALTER USER statement before exe ...

  2. Skiing POJ 3037 很奇怪的最短路问题

    Skiing POJ 3037 很奇怪的最短路问题 题意 题意:你在一个R*C网格的左上角,现在问你从左上角走到右下角需要的最少时间.其中网格中的任意两点的时间花费可以计算出来. 解题思路 这个需要发 ...

  3. [LeetCode] 130. 被围绕的区域

    题目链接 : https://leetcode-cn.com/problems/surrounded-regions/ 题目描述: 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有 ...

  4. 通过实例简介python使用ctypes模块调用C语言动态库

    看介绍python语言时,说它是胶水语言,可以调用其他语言.通过使用ctypes模块就可以调用C语言的动态库.下面先放上官方文档和几个比较好的博文. 1.官方文档:http://python.net/ ...

  5. 自我笔记,Rides介绍

    Redis是一个key-value存储系统,和Memccached类似,支持存储的value类型相对更多,很大程度上补偿memcached这类key-value存储的不足 他提供了Java,c/c++ ...

  6. gorpeln的个人博客 - gorpeln

    2019-10-18    App Store 审核指南 2019-10-03    锚点跳转距离顶部指定距离 2019-09-23    Jekyll 简单加密 (pwd=123456) 2019- ...

  7. java字符流读取文件

    package ba; import java.io.*; public class zifuTest { public static void main(String[] args) { FileI ...

  8. 一份贴近真实面试的Java面试题(基础部分)

    这是一份关于Java基础的面试题.在网上的关于Java的面试题数不胜数,但本人认真看过后觉得大多数都没有实用性,有很多是面试官根本就不会问到的,企业根本不会用到的,一些已经脱离了实际开发的技术问题.而 ...

  9. 关于jsp 获得当前绝对路径的方法

    方法1) request.getRequestURL(); 方法2)  request.getScheme()+"://"+request.getServerName()+&quo ...

  10. Python自动化学习--批量执行.py用例

    这段时间在摸索自动化,学到执行测试用例的时候发现,执行单用例的时候很简单,如果想多条用例执行的话就没那么简单了,经过几番查找,找到如下方法: unittest模块中的TestLoader类有一个dis ...