Elasticsearch基础_5.ES聚合功能

文章目录

一、数据聚合

聚合可以让我们极其方便的实现对数据的统计、分析、运算。

聚合常见的有三类:

  • (Bucket)聚合:用来对文档做分组

    • TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组
    • Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
  • 度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等

    • Avg:求平均值
    • Max:求最大值
    • Min:求最小值
    • Stats:同时求max、min、avg、sum等
  • 管道(pipeline)聚合:其它聚合的结果为基础做聚合

注意:参加聚合的字段必须是keyword、日期、数值、布尔类型

1.1、桶聚合

1.1.1、单维度桶聚合

最简单的桶聚合是单维度桶聚合,指的是按照一个维度 对文档进行分组聚合。在桶聚合时,聚合的桶也需要匹配的方式,有termsfilterranges等。本节只介绍比较有代表性的terms查询和ranges查询。

java 复制代码
GET /hotel/_search
{
  "size": 0,                   // 如果不需要返回匹配的文档信息,最好将返回的文档个数设置为0。这样既可以让结果看起来更整洁,又可以提高查询速度。
  "aggs": {                    // 定义聚合
    "brandAgg": {              // 给聚合起个名字
      "terms": {               // 聚合的类型,按照品牌值聚合,所以选择term
        "field": "brand",      // 参与聚合的字段
        "size": 20             // 希望获取的聚合结果数量
      }
    }
  }
}

1.1.2、聚合结果排序

默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。

我们可以指定order属性,自定义聚合的排序方式:

java 复制代码
GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "asc" // 按照_count升序排列
        },
        "size": 20
      }
    }
  }
}

1.1.3、限定聚合范围

默认情况下,Bucket聚合是对索引库的所有文档做聚合,但真实场景下,用户会输入搜索条件,因此聚合必须是对搜索结果聚合。那么聚合必须添加限定条件。

我们可以限定要聚合的文档范围,只要添加query条件即可:

java 复制代码
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200 // 只对200元以下的文档聚合
      }
    }
  }, 
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}

1.2、Metric聚合

上面我们对酒店按照品牌分组,形成了一个个桶。现在我们需要对桶内的酒店做运算,获取每个品牌的用户评分的min、max、avg等值。

这就要用到Metric聚合了,例如stats聚合:就可以获取min、max、avg等结果。

java 复制代码
GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20
      },
      "aggs": { // 是brandAgg聚合的子聚合,也就是分组后对每组分别计算
        "score_stats": { // 聚合名称
          "stats": { // 聚合类型,这里stats可以计算min、max、avg等
            "field": "score" // 聚合字段,这里是score
          }
        }
      }
    }
  }
}

这次的score_stats聚合是在brandAgg的聚合内部嵌套的子聚合。因为我们需要在每个桶分别计算。

二、聚合总结

聚合必须的三要素:

  • 聚合名称
  • 聚合类型
  • 聚合字段

聚合可配置属性有:

  • size:指定聚合结果数量
  • order:指定聚合结果排序方式
  • field:指定聚合字段
相关推荐
penguin_bark1 小时前
Git操作
大数据·git·elasticsearch
董一峰4 小时前
Elasticsearch Suggester
大数据·elasticsearch·搜索引擎
萧曵 丶4 小时前
docker 部署 filebeat 采集日志导入到elasticsearch 设置pipeline
elasticsearch·docker·jenkins·filebeat
大宇进阶之路7 小时前
Linux安装elasticsearch单机版
大数据·elasticsearch·搜索引擎
霍金的微笑11 小时前
ElasticSearch搜索引擎
java·elasticsearch·搜索引擎
Elastic 中国社区官方博客11 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 1 部分:Elastic Serverless Forwarder
大数据·elasticsearch·搜索引擎·serverless·云计算·aws
hengzhepa1 天前
ElasticSearch备考 -- Multi field
大数据·学习·elasticsearch·搜索引擎·全文检索·es
G丶AEOM1 天前
MySQL 和 Elasticsearch 的应用场景
mysql·elasticsearch·八股