ES聚合分页(group by分组后分页)

这篇具有很好参考价值的文章主要介绍了ES聚合分页(group by分组后分页)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ES实现类似sql的group by后如何分页?

{
    "query": {
        ...... //搜索条件
    },
    "aggs": {
        "count": {   // COUNT(*),统计GROUP BY后的总数
            "cardinality": {
                "field": "goods_id"    // 因为我这里GROUP BY的字段是goods_id,所以就用goods_id来计数了
            }
        },
        "goods_id": {
            "terms": {
                "field": "goods_id",    // 选择GROUP BY的字段
                "size": 20    // 取出20条GROUP BY的数据。数量应设置为sql中offset+limit的数量。注:其实es聚合操作不是很支持分页,于是只能先将数据取出,再对其做分页操作,可想而知页数越往后效率越低
            },
            "aggs": {
                "group": {
                    "top_hits": {
                        "sort": [
                            {
                                "stock_num": {
                                    "order": "desc"    // GROUP BY的数据如何排序,这里是根据stock_num 降序排列
                                }
                            }
                        ],
                        "_source": {    // 对应SQL的SELECT 
                            "includes": [
                                "goods_no"    // SELECT的列
                            ]
                        },
                        "size": 1    // es聚合时需要指定返回几条数据(即返回几条同一个goods_id的数据)我们做GROUP BY操作就只要写1就完事了
                    }
                },
                "r_bucket_sort": {    // 分页操作
                    "bucket_sort": {
                        "sort": [],
                        "from": 0,   // 对上面取出的20条数据分页,等价于SQL的OFFSET
                        "size": 10   // SQL的LIMIT
                    }
                }
            }
        }
    },
    "size": 0,   // 因为是做聚合操作,所以直接无视query筛选出的数据
    "from": 0
}

案例:统计业务应用流量数据文章来源地址https://www.toymoban.com/news/detail-507284.html

curl -XGET /action*/_search
{
  "from": 0,
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "occurredAt": {
              "gte": "1659316790000",
              "lt": "1659323990000"
            }
          }
        }
      ],
      "must": [
        {
          "term": {
            "subtype.keyword": {
              "value": "/datatrans/traffic"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "count": {
      "cardinality": {
        "field": "applicationType.keyword"
      }
    },
    "group_by_app_type": {
      "terms": {
        "field": "applicationType.keyword",
        "min_doc_count": 1,
        "shard_min_doc_count": 0,
        "show_term_doc_count_error": false,
        "size": 40,
        "order": [
          {
            "_count": "desc"
          }
        ]
      },
      "aggs": {
        "sum_bytes_sent": {
          "sum": {
            "field": "bytesSent"
          }
        },
        "sum_bytes_received": {
          "sum": {
            "field": "bytesReceived"
          }
        },
        "sum_total_flow": {
          "sum": {
            "script": {
              "source": "(doc[\"bytesSent\"].value + doc[\"bytesReceived\"].value)"
            }
          }
        },
        "max_date": {
          "max": {
            "field": "occurredAt"
          }
        },
        "min_date": {
          "min": {
            "field": "occurredAt"
          }
        },
        "bucket_filed": {
          "bucket_sort": {
            "sort": [
              {
                "sum_bytes_sent": {
                  "order": "asc"
                }
              }
            ],
            "from": 0,
            "size": 40
          }
        }
      }
    }
  }
}'

到了这里,关于ES聚合分页(group by分组后分页)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聚合函数+group by

    常用的聚合函数有COUNT()、AVG()、SUM()、MAX()、MIN()。 COUNT()函数:统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。 COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。 COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 对于

    2024年02月02日
    浏览(28)
  • group by进行分组时查询数据

    group by进行分组时查询数据需要注意:  select后的字段: 要么就要包含在Group By语句的后面,作为分组的依据;        要么就要被包含在聚合函数中。 错误: SELECT name, salary FROM student GROUP BY name        select 后的字段 salary 不在 group by 后面,所以salary无法显示全部值。 正确

    2024年02月11日
    浏览(23)
  • MySQL查询分组Group By原理分析

    日常开发中,我们经常会使用到group by: 你是否知道group by的工作原理呢? group by和having有什么区别呢? group by的优化思路是怎样的呢? 使用group by有哪些需要注意的问题呢? 使用group by的简单例子 group by 工作原理 group by + where 和 having的区别 group by 优化思路 group by 使用注意

    2023年04月16日
    浏览(31)
  • elasticsearch的group by分组和sum求和

    最近在使用es查询某个字段在特定查询条件下的某个字段的求和时,忘记了query语句是怎么写的,简单记录一下,方便自己和他人查阅。 一 什么是elasticsearch? elasticsearch是一个分布式的使用 REST 接口的搜索引擎,简称为ES,它是面向文档的,可以存储整个对象或文档。 二:

    2024年02月12日
    浏览(30)
  • Sql group by 分组取时间最新的一条数据

    1.取时间最新的记录 不分组有重复(多条CreateTime一样的都是最新记录) 2.分组后取时间最新的记录 3.如果Id是uuid类型无法使用max(id)的解决办法(使用开窗函数)

    2024年02月11日
    浏览(44)
  • 【算法】在vue3的ts代码中分组group聚合源数据列表

    有一个IListany()对象列表, 示例数据为[{id:\\\'1\\\',fieldName:\\\'field1\\\',value:\\\'1\\\'},{id:\\\'1\\\',fieldName:\\\'field2\\\',value:\\\'2\\\'},{id:\\\'2\\\',fieldName:\\\'field1\\\',value:\\\'1\\\'},{id:\\\'2\\\',fieldName:\\\'field2\\\',value:\\\'2\\\'}] 那么在ts中将它们根据id分组构建为两个dynamicObject,类推,如果id有n个,那需要自动构建n个dynamicObject。 算法实现: 在以

    2024年02月11日
    浏览(30)
  • Hive:聚合函数、GROUP BY、ORDER BY、LIMIT、执行顺序和JOIN、函数

    1.聚合函数 常见的聚合函数: Count、Sum、Max、Min和Avg 特点:不管原始数据多少条,聚合之后只有一条 Count(column)返回某列的行数,不包括NULL值 2.GROUP BY select中的字段要么是GROUP BY字段,要么是被聚合函数应用的字段 2.HAVING WHERE中无法出现聚合函数,所以有了HAVING WHERE是分组前

    2024年02月07日
    浏览(35)
  • PostgreSQL数据库以任意时间间隔聚合查询group by

    我们做的是智慧交通信控平台,需要将实时采集到的交通大数据(信号机灯态、卡口过车、雷达数据等)全部入库,按照时间顺序存储 然后根据原始数据,再计算出一些交通评价指标,存储到数据库,供后续聚合查询和分析统计 前端设备(信号机、雷达、卡口等)上报原始

    2024年02月02日
    浏览(36)
  • mysql通过group by分组取最大时间对应的数据,提供两种有效方法。

    1、项目记录表project_record的结构和数据如下: 以下为项目记录表 project_record 的所有数据。project_id为项目Id,on_project_time为上项目时间。(每一条数据代表着上某个项目(project_id)的时间(on_project_time)记录) 2、我们的需求是:取出每个项目中最大上项目时间对应的那条数据。

    2023年04月08日
    浏览(31)
  • 【postgresql 基础入门】分组查询 group by 子句的写法,分组条件过滤having子句的写法,多列的分组以及与join联合的多表分组

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 本文主要分享在postgresql 数据库中对查询结果进行分组group by,以及对分组进行条件过滤having,同时对它

    2024年04月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包