Elastic Search 聚合笔记

摘要:
从表中选择COUNT(颜色)_xxx GROUP BY颜色桶在概念上类似于SQL Groupby,而指示符类似于COUNT)、SUM()、MAX()和其他统计方法。“Maximum cost”:2260.0}}}}返回值将显示具有不同请求值的不同格式。大多数统计数据基于数字属性。计数最大值、最小值、平均值和ES也支持一些高级统计指标。

ElasticSearch的聚合(Aggregations)引入了两个概念:

  1. 桶(Buckets):    满足特定条件的文档的集合
  2. 指标(Metrics):    对桶内的文档进行统计计算

每个聚合都是多个桶指标的组合。和sql的聚合语法对比:

SELECT COUNT(color) FROM table_xxx GROUP BY color 

在概念上类似于 SQL 的分组(GROUP BY),而指标则类似于 COUNT() 、 SUM() 、 MAX() 等统计方法。

典型示例:

一个ES聚合的请求示例如下:

{
    "size"0,
    "aggs": {
      "
最大费用": {
        "max": { "field""
费用" }
    }
  }
}

关键字"aggs"标志了它是一个聚合请求,里面的请求参数为:

"最大费用": { "max""field""费用" } }

主要包含标题,聚合类型(关键字),聚合参数三个部分。

返回值为:

{
    "aggregations": {
      "
最大费用": {
        "value"2260.0
      }
    }
}

返回值随着不同的请求值会呈现不同的格式,具体规则可以看下面介绍。

 

指标(Metrics):

指标用来对查询结果进行统计运算,除了计数外,大部分针对数字类型属性进行统计。

"aggs": {
    "
最大费用": { "max": { "field""费用" } }
}

典型的统计算法有:

  • 计数
  • 最大值
  • 最小值
  • 平均值

ES也支持一些高级统计指标,例如加权平均值,范围百分比等,具体可参看其官方文档

一个聚合请求下可以下发多个指标:

{
    "size"0,
    "aggs": {
      "
最大费用": { "max": { "field""费用" } },
      "
费用合计": { "sum": { "field""费用" } }
    }
}

 

桶(Buckets):

桶用于对数据进行分组,类似于sqlserver的group,传统的分组请求在es中对应的语法为:

"aggs": {
    "
性别": {
      "terms": { "field""
性别" }
    }
}

和传统的关系型数据库分组相比,ES具有如下优势:

  1. 提供不少高级分组方式,如直方图,范围,过滤等
  2. 支持多级聚合,非常容易构建类似透视图的数据。
  3. 支持多种管道聚合

聚合和bucket的层级关系:

  1. 聚合可以放多个bucket,
  2. bucket下也可以挂聚合

这样,当使用两个指标分组的时候,有两种组合方式,

  1. 一个聚合,两个指标
  2. 两个指标组合成一个多级聚合

这两个的行为是不一样的,当聚合下放多个bucket的时候,是从两个维度分别统计,并union展示:后面的则是在第一个指标每个分组中就行二次分组。

Elastic Search 聚合笔记第1张Elastic Search 聚合笔记第2张

简单的讲,一个是a+b, 一个是a*b

 

返回结果格式:

规则1: 当只返回一个结果的时候,会作为属性返回,metrics的返回值基本上遵循此规则。

查询

 "aggs": {
    "
最大费用": { "max": { "field""费用" } },
    "
费用合计": { "sum": { "field""费用" } }
}

返回结果:

"aggregations": {
    "
最大费用": { "value"2260.0 },
    "
费用合计": { "value"158704.37085723877 }
}

有的bucket也只返回一个结果,例如filter bucket

规则2: 结果分组名称不可预知的时候,会作为名为buckets的数组返回,大部分的bucket返回结果满足此属性。

请求:

"aggs": {
    "
性别": { "terms": { "field""性别" }
  }
}

返回结果:

"aggregations": {
    "
性别": {
      "doc_count_error_upper_bound"0,
      "sum_other_doc_count"0,
      "buckets": [
        { "key""
""doc_count"289 },
        { "key""
""doc_count"208 }
    ]
  }
}

规则3: 结果分组是可预知的多值是,会作为名为buckets的对象返回,部分bucket返回值,如rangefilters遵循此规则。

请求:

"aggs": {
    "
费用级别": { 
      "range": {
        "field""
费用",
        "keyed"true,
        "ranges": [
          { "key""
便宜""to"100 },
          { "key""
一般""from"100"to"300 },
          { "key""
""from"300 }
        ]
      }
    }
}

返回结果:

"aggregations": {
    "
费用级别": {
      "buckets": {
        "
便宜": { "to"100.0"doc_count"20 },
        "
一般": { "from"100.0"to"300.0"doc_count"385 },
        "
": { "from"300.0"doc_count"92}
      }
   }
}

免责声明:文章转载自《Elastic Search 聚合笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java经典练习题_Day03关于c语言中结构体的初始化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux使用iptables设置黑白名单

使用ipset工具 1,下面我先说下iptables的基本配置规则,然后再说ipset以下使用C7 x86_64为实验环境CentOS7默认的防火墙不是iptables,而是firewalle.如果你没有安装iptables的话,你可以使用以下命令进行安装systemctl stop firewalldsystemctl disable firewalld...

规则引擎.Net Core

.Net Core 环境下构建强大且易用的规则引擎 https://www.cnblogs.com/chenug/p/9160397.html 本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满足要求。但随着业务的...

.htaccess rewrite 规则详细说明

rewrite的语法格式: RewriteEngine On #要想rewrite起作用,必须要写上哦 RewriteBase url-path #设定基准目录,例如希望对根目录下的文件rewrtie,就是”/” RewriteCond test-string condPattern #写在RewriteRule之前,可以有一或N条,用于测试rewrite...

【Excle数据透视表】如何利用图标集将销售数据划分为五个等级

我们如何用图标集来直观看出订单情况呢? 现在有数据如下: 步骤 选中“订单列”→开始→条件格式→图标集→等级→ 此时,在每个数字前面都出现了一个等级符号了 查看预置五等级图标集的规则如下: 开始→条件格式→管理规则→显示其格式规则(当前工作表)→编辑规则 清除规则的步骤 条件格式→清除规则...

oracle排序

oracle在使用rownum进行排序的时候,有时是会出错的,所以可以考虑使用函数实现排序: 1.row_number() over()row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与r...

二、Metrics指标类型

Prometheus 的客户端库中提供了四种核心的指标类型。但这些类型只是在客户端库(客户端可以根据不同的数据类型调用不同的 API 接口)和在线协议中,实际在 Prometheus server 中并不对指标类型进行区分,而是简单地把这些指标统一视为无类型的时间序列 2.1、Counter (计数器) ​ Counter 类型代表一种样本数据单调递增的指...