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之家,了解更多新鲜内容

在这里插入图片描述

目录
相关文章
|
JSON Ubuntu Java
Elasticsearch聚合学习之四:结果排序
在前面的实战中,聚合的结果以桶(bucket)为单位,放在JSON数组中返回,这些数据是没有排序的,今天来学习如何给这些数据进行排序
635 0
Elasticsearch聚合学习之四:结果排序
|
存储 SQL JSON
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
1968 0
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
|
SQL 数据挖掘 数据库
HiveSQL分位数函数percentile()使用详解+实例代码
HiveSQL分位数函数percentile()使用详解+实例代码
6411 0
HiveSQL分位数函数percentile()使用详解+实例代码
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
9358 118
|
Java
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
401 0
|
存储 关系型数据库 MySQL
在 MySQL 中使用 Insert Into Select
【8月更文挑战第11天】
4977 0
在 MySQL 中使用 Insert Into Select
|
人工智能
ES聚合中的Filter Bucket(过滤桶)详解
ES聚合中的Filter Bucket(过滤桶)详解
|
网络安全 开发工具 git
【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效
【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效
5531 1
|
安全 Linux 网络安全
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总
Kibana 最常见的“启动报错”或“无法连接ES集群服务”的故障原因及解决方案汇总

热门文章

最新文章