【Elasticsearch】 Composite Aggregation 详解

1.什么是 Composite Aggregation?

Composite Aggregation 是 Elasticsearch 中的一种特殊聚合方式,适用于需要分页展示的聚合结果。它与传统的聚合方式不同,采用了基于游标的分页模型。这种聚合方式可以高效地处理多级聚合中的所有桶,并支持分页功能。

2.基本结构

一个典型的 Composite Aggregation 查询如下:

```json

GET /your_index_name/_search

{

  "size": 0,

  "aggs": {

    "my_composite_agg": {

      "composite": {

        "size": 10,

        "sources": [

          {

            "field1": {

              "terms": {

                "field": "your_field_name1"

              }

            }

          },

          {

            "field2": {

              "terms": {

                "field": "your_field_name2"

              }

            }

          }

        ]

      }

    }

  }

}

```

在上述查询中:

• `sources`定义了按哪些字段分组,字段顺序决定了分组键(bucket key)的生成顺序。

• `size`定义每页的桶数量。

• 响应结果中的`after_key`用于获取下一页数据。

3.分页机制

Composite Aggregation 的分页机制通过`after`参数实现。每次查询返回指定数量的桶,并通过`after_key`提供下一页的游标。这种方式可以确保分页查询中数据无重复、无遗漏。

例如:

```json

GET /your_index_name/_search

{

  "size": 0,

  "aggs": {

    "my_composite_agg": {

      "composite": {

        "size": 10,

        "sources": [

          {

            "field1": {

              "terms": {

                "field": "your_field_name1"

              }

            }

          }

        ],

        "after": {

          "field1": "last_value_of_field1"

        }

      }

    }

  }

}

``

4.排序和方向

Composite Aggregation 支持对每个值源进行排序,可以通过设置`order`参数为`asc`(升序)或`desc`(降序)。

```json

GET /your_index_name/_search

{

  "size": 0,

  "aggs": {

    "my_composite_agg": {

      "composite": {

        "size": 10,

        "sources": [

          {

            "field1": {

              "terms": {

                "field": "your_field_name1",

                "order": "desc"

              }

            }

          },

          {

            "field2": {

              "terms": {

                "field": "your_field_name2",

                "order": "asc"

              }

            }

          }

        ]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值