暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch聚合后结果如何实现分页?

Elasticsearch之家 2022-05-11
5149

0. 引言

elaticsearch中实现聚合操作十分常见,同时es本身存储的数据量一般都比较大,因此聚合结果数量通常都比较多,所以针对聚合结果进行分页,也是非常常见的需求

1. 实现

我们可以通过bucket_sort管道聚合来实现分页

我们来看看官方文档[1]中的定义


中文释义:一个父管道聚合,对其父多桶聚合的桶进行排序。可以指定零个或多个排序字段以及相应的排序顺序。每个桶可以根据它的_key、_count或它的子集合进行排序。此外,可以设置参数from和size,以便截断结果桶。

下面我们通过一个例子来说明其作用:

我们利用kibana提供的样例数据写个聚合:

    GET kibana_sample_data_flights/_search
    {
    "size": 0,
    "aggs": {
    "date_aggs": {
    "date_histogram": {
    "field": "timestamp",
    "interval": "day",
    "format": "yyyy-MM-dd"
    }
    }
    }
    }
    复制

    执行结果:

    添加bucket_sort来实现分页


      GET kibana_sample_data_flights/_search
      {
      "size": 0,
      "aggs": {
      "date_aggs": {
      "date_histogram": {
      "field": "timestamp",
      "interval": "day",
      "format": "yyyy-MM-dd"
      },
      "aggs": {
      "page": {
      "bucket_sort": {
      "sort": [],
      "from": 1,
      "size": 3
      }
      }
      }
      }
      }
      }
      复制

      分页结果:

      可以看到我们想要的分页结果已经实现了,同时我们还可以在sort属性中定义分页排序条件


      怎么样,bucket_sort的实现是不是很简单,赶紧自己动手试试吧。

      关注星球,了解更多新鲜内容



      References

      [1]
       官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.13/search-aggregations-pipeline-bucket-sort-aggregation.html


      文章转载自Elasticsearch之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论