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. [19/10/16-星期三] Python中的模块和包、异常、操作文件

    一.模块 # 模块(module) # 模块化,模块化指将一个完整的程序分解为一个一个小的模块 # 通过将模块组合,来搭建出一个完整的程序 # 不采用模块化,统一将所有的代码编写到一个文件中 # 采用 ...

  2. 四、JVM — 类文件结构

    类文件结构 一 概述 二 Class 文件结构总结 2.1 魔数 2.2 Class 文件版本 2.3 常量池 2.4 访问标志 2.5 当前类索引,父类索引与接口索引集合 2.6 字段表集合 2.7 ...

  3. CQRS框架(nodejs的DDD开发落地框架)初识感想

    CQRS是啥?DDD又是啥? 这两个概念其实没什么神秘的,当然此文章中的这两个概念以曾老师的课程为准(关于CQRS和DDD的标准概念,google上已经很多了,不再赘述.) DDD(Domain Dr ...

  4. Python数据结构与算法?

    数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...

  5. Neo4j清空所有数据

    两种方法: 一.用下列 Cypher 语句: match (n) detach delete n 二. 1.停掉服务: 2.删除 graph.db 目录: 3.重启服务. 原文地址:http://ne ...

  6. 如何增强Linux和Unix服务器系统安全性

    众所周知,网络安全是一个非常重要的课题,而 Linux 和 unix 又是一种服务器上运行最广告的操作系统,下面本文将就加强一些适当的配置来防止一些安全问题的发生,以增强Linux/Unix服务器系统 ...

  7. 九、LaTex中的浮动体

    未利用浮动体:

  8. CSS完整

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  9. 关于Mysql select语句中拼接字符串的记录

    在mysql的SELECT语句中拼接两列(或多列)的字符串显示: mysql> select concat(dname,loc) from dept; 以上语句便把dept表的dname,loc ...

  10. centos 系统查看raid信息

    一.MegaCli命令介绍 MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等MegaCli 的Media Error Count: 0 Other Error Count: 0 ...