Elastic实战: 通过bucket_sort针对聚合后结果实现分页、排序

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

0. 引言

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

1. 实现

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

我们来看看官方文档中的定义
在这里插入图片描述

中文释义:一个父管道聚合,对其父多桶聚合的桶进行排序。可以指定零个或多个排序字段以及相应的排序顺序。每个桶可以根据它的_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属性中定义分页排序条件

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": [
              {"_count": {"order":"desc"}}
              ],
            "from": 1,
            "size": 3
          }
        }
      }
    }
  }
}

在这里插入图片描述

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

关注公众号:Elaticsearch之家,了解更多新鲜内容

在这里插入图片描述

目录
相关文章
|
6月前
|
搜索推荐 JavaScript Java
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
89 0
|
人工智能
ES聚合中的Filter Bucket(过滤桶)详解
ES聚合中的Filter Bucket(过滤桶)详解
|
6月前
|
算法 测试技术 C#
map|二分查找|离线查询|LeetCode:2736最大和查询
map|二分查找|离线查询|LeetCode:2736最大和查询
|
算法 索引
Elasticsearch - 聚合获取原始数据并分页&排序&模糊查询
Elasticsearch - 聚合获取原始数据并分页&排序&模糊查询
316 0
Elasticsearch - 聚合获取原始数据并分页&排序&模糊查询
|
数据挖掘
白话Elasticsearch42-深入聚合数据分析之案例实战__bucket filter:统计牌品最近一个月的平均价格(Filter Aggregation)
白话Elasticsearch42-深入聚合数据分析之案例实战__bucket filter:统计牌品最近一个月的平均价格(Filter Aggregation)
137 0
|
存储 SQL 算法
7.【Elasticsearch】Elasticsearch从入门到放弃-聚合桶前置过滤及group by having
Elasticsearch从入门到放弃-聚合桶前置过滤及group by having
7.【Elasticsearch】Elasticsearch从入门到放弃-聚合桶前置过滤及group by having
|
存储 JSON NoSQL
MongoDB基本操作(二)——排序、分页、聚合查询、优化索引等
MongoDB基本操作(二)——排序、分页、聚合查询、优化索引等
1473 0
|
索引
Elastic: 同一条索引,使用GET _cat/indices?v与GET index/_count查询出来的文档数为什么不同?
首先我们来看官方文档中对于_cat/indices的解释: 原文: These metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.
257 0
Elastic: 同一条索引,使用GET _cat/indices?v与GET index/_count查询出来的文档数为什么不同?
|
关系型数据库 MySQL
ES复杂查询-结果过滤, 排序,分页
ES复杂查询-结果过滤, 排序,分页
|
Ubuntu Java 程序员
Elasticsearch聚合的嵌套桶如何排序
在elasticsearch的聚合查询中,经常对聚合的数据再次做聚合处理,这样的聚合结果如何进行排序呢,本文将对此展开讨论和实践
329 0
Elasticsearch聚合的嵌套桶如何排序