elasticsearch官方文档学习之第一章:起步 04 简单聚合

博客介绍了Elasticsearch中聚合的功能,它能对数据分组并提取统计信息,类似SQL的GROUP by和聚合函数。还给出多个查询示例,包括按状态分组、计算平均账户余额、对平均余额排序,以及按年龄等级和性别分组计算平均账户余额等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Aggregations
聚合提供了对数据进行分组和提取统计信息的能力。考虑聚合最简单的方法是大致将其等同于SQL GROUP by和SQL聚合函数。

1)首先,这个示例对所有帐户按照状态进行分组,然后按count降序排列默认返回top10的结果。

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
        //"size": 10
      }
    }
  }
}

查询说明:size = 0,我们只关注聚合的结果,不关注具体的文档信息。group_by_state为聚合后的别名可任意命名
等价于sql:SELECT state, COUNT() FROM bank GROUP BY state ORDER BY COUNT() DESC LIMIT 10;

2)在上述示例的基础上,按状态计算平均帐户余额

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

查询说明:我们将average_balance聚合嵌套在group_by_state聚合中。这是所有聚合的常见模式。可以在聚合中任意嵌套聚合。

3)基于之前的聚合,我们现在按降序对平均余额排序:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

4)这个例子展示了我们如何按照年龄等级(20-29岁,30-39岁,40-49岁)分组,然后按性别分组,最后得到每个年龄等级,每个性别的平均账户余额:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "average_balance": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值