美文网首页
ES之聚合分析

ES之聚合分析

作者: dynemm | 来源:发表于2020-02-15 11:33 被阅读0次

一:聚合分析简介

对于ES聚合,相当与数据库中的group by 语句,把ES中符合的数据给聚合并返回给客户端。

ES中,聚合语句的查询格式为:

{
  "aggs": {
    "agg_name": {<!--聚合名称-->
      "agg_type": {<!---聚合类型-->
        <!--具体聚合body-->
      }
    }
  }
}

二:聚合分析分类

ES当中的聚合分析主要分为指标(metric)聚合和桶(bucketing)聚合。

1.指标聚合

指标聚合(也叫度量聚合),简单点来说就是对数据集中的数据进行相应的指标计算之后,得出聚合结果,如求最大值、最小值、平均值等。
其一般的查询格式为:

{
  "size": 0,
  "aggs": {
    "max_agg": {
      "max": {<!--指标关键词-->
        "field": "score"<!--按照某个字段进行聚合-->
      }
    }
  }
}

PS:聚合查询中,size可以设置为0,表示不返回ES中的文档,只返回ES聚合之后的数据,提高查询速度,当然如果你需要这些文档的话,也可以按照实际情况进行设置。
指标聚合的分类大致如下:

  1. max min sum avg
  2. 文档计数 count
  3. Value count 统计某字段有值的文档数
  4. cardinality 值去重计数
  5. stats 统计 count max min avg sum 5个值
  6. Extended stats
  7. Percentiles 占比百分位对应的值统计
  8. Percentiles rank 统计值小于等于指定值的文档占比
  9. Geo Bounds aggregation 求文档集中的地理位置坐标点的范围
  10. Geo Centroid aggregation 求地理位置中心点坐标值
    大家具体情况具体使用吧!

2.桶聚合(bucket)

桶聚合,就是把符合聚合条件数据放在一个分组(桶)里面,宁外,桶聚合还将计算落入某个桶里面的文档数量(count)
举个例子:按照某个字段进行聚合,比如color字段有red、yellow、black等,按照颜色进行聚合,查询DSL语句为:

{
  "size": 0,
  "aggs": {
    "term_agg": {
      "terms": {<!--指标关键词-->
        "field": "color"<!--按照某个字段进行聚合-->
      }
    }
  }
}

返回结果为:

...
{
...
"bucket":[
{"key":"red",
"doc_count":123}
...
]
}

key为聚合的桶的名称,doc_count就是聚合的数量,有一个比较重要的地方,就是在做聚合分析的时候,该字段的mapping需要设置为不可分词的,不然聚合的结果可能不是你想的那样。
聚合操作,还是比较复杂的,有时候要按照嵌套进行聚合才能得出你想要的答案,下面贴出来一些常用的聚合:

  1. Terms Aggregation 根据字段值项分组聚合
  2. filter Aggregation 对满足过滤查询的文档进行聚合计算
  3. Filters Aggregation 多个过滤组聚合计算
  4. Range Aggregation 范围分组聚合
  5. Date Range Aggregation 时间范围分组聚合
  6. Date Histogram Aggregation 时间直方图(柱状)聚合
  7. Missing Aggregation 缺失值的桶聚合
  8. Geo Distance Aggregation 地理距离分区聚合
    补充一下,还有矩阵聚合,这个可以聚合出条件并集的这种情况(adjacency_matrix),
    比如说 A、B、C 想聚合A、B、C、A&B、A&C、B&C就可以用矩阵聚合

三:嵌套聚合

在实际情况中,你可能想把符合某一条件的数据聚合到一个桶里面,然后在这个桶里面进行各项指标的计算,这时候应该怎么做呢?嵌套聚合。
比如下面的DSL语句:

{
  "size": 0,
  "aggs": {
    "term_agg": {
      "terms": {<!--指标关键词-->
        "field": "color"<!--按照某个字段进行聚合-->
      }
    },
“aggs”:{
"avg_price"{
"avg":{<!--指标关键词-->
"field":"price"}
}
}
  }
}

表示,按照颜色聚合到桶内后,计算每个颜色下的平均价格。
复杂的嵌套查询还有很多,比如说上面的按照平均值聚合后升序排列该怎么做?实际情况也有很多复杂的聚合查询,具体情况具体讨论吧。

这应该算我隔了好几年来第一次写博客吧,写得不好请见谅,自己也在学习上升的阶段,所以也想通过写博客来巩固巩固,不然容易忘记知识,希望自己能坚持下去!

相关文章

  • ES之聚合分析

    一:聚合分析简介 对于ES聚合,相当与数据库中的group by 语句,把ES中符合的数据给聚合并返回给客户端。 ...

  • Elasticsearch——聚合搜索

    聚合分析简介 聚合分析:英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能。 功能...

  • golang elasticsearch 聚合分析(Aggreg

    elasticsearch聚合分析的概念和语法可以参考:ES聚合分析[https://www.tizi365.co...

  • Elasticsearch笔记(6)

    ES中的聚合 ES中的聚合分析主要包含指标聚合、桶聚合、管道聚合和矩阵聚合等。后面两种后面会慢慢移除。主要多前两种...

  • 6.3-作用范围与排序

    聚合的作⽤范围 ES 聚合分析的默认作⽤范围是 query 的查询结果集 同时 ES 还⽀持以下⽅式改变聚合的作⽤...

  • ElasticSearch 7.x 聚合查询

    聚合查询 |ES 的聚合查询和MyQL的聚合查询类型,ES 的聚合查询相比MySQL 要强大的多,ES提供的统计数...

  • ES 聚合分析简介

    1.聚合(aggregation) 对数据的总体的概览,分布。 bucket aggregation:一些列满足特...

  • ES 聚合索引简介

    介绍 本章会简单介绍es的聚合索引,通过分析bucket和metric和使用来进一步了解聚合索引。 什么是聚合 e...

  • es7.x(10)aggs聚合查询

    ES聚合查询流程 核心概念2.1 桶2.2 指标 ES聚合查询的语法3.1 聚合查询的size语法 指标聚合4.1...

  • ElasticSearch - 聚合查询概览

    聚合 Elasticsearch除搜索以外,提供的针对ES数据进行统计分析的功能实时性高 通过聚合,我们会得到一个...

网友评论

      本文标题:ES之聚合分析

      本文链接:https://www.haomeiwen.com/subject/xvdefhtx.html