es 实现sql的 group by后如何分页?

先放json解释,再放纯净版方便copy

{"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
}

纯净版

{"query": {},"aggs": {"count": {"cardinality": {"field": "group_by_field"}},"goods_id": {"terms": {"field": "group_by_field","size": offset + limit},"aggs": {"group": {"top_hits": {"sort": [{"sort_by_field": {"order": "desc"}}],"_source": {"includes": ["select_field1","select_field2"]},"size": 1}},"r_bucket_sort": {"bucket_sort": {"sort": [],"from": offset,"size": limit}}}}},"size": 0,"from": 0
}

拿到response后怎么取数据就不说了。用es作group by分页属实蛋疼,个人觉得不是很好,有条件还是多做个索引

对于一般的sql可以直接用
POST http://localhost:9200/_xpack/sql/translate
也是挺方便的,不过基本只能转换简单sql,group by不行

es 聚合分页(group by后分页)相关推荐

  1. Composite 聚合——Elasticsearch 聚合后分页新实现

    1.聚合后分页应用场景 在常规检索的基础上,用户期望返回基于特定字段的聚合结果,且用户期望分页查看检索和聚合结果. 如下图所示:以2020东京奥运会热点新闻亚洲飞人"苏炳添"为例, ...

  2. 解决es分组后分页查询的问题

    今天碰到的问题:es查询中携带了分组查询,导致进行分页操作的时候冲突,不能实现分页功能,后进行改良(抄同事代码),可以实现分页查询 int limit = paging.getLimit(); int ...

  3. 分组后分页_SQL(约束、视图、分页、序列、索引、同义词、创建用户,为用户授权、执行计划的使用 数据的导入导出)...

    学习主题:SQL 学习目标: 掌握约束 掌握视图 修改表名与删除表 删除表中的列语句的语法结构是什么? 答:delete 表名from table where ; 删除表中的列语句的语法结构是什么? ...

  4. group by 分页 mysql_Mysql 单表查询-排序-分页-group by初识

    Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...

  5. 【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据

    1.概述 ES 单分片使用 From/Size 分页遇到重复数据 常规情况下 ES 单分片使用 From/Size 是不会遇到数据重复的,数据重复的可能原因有: 没有添加排序: 添加了按得分排序,但是 ...

  6. minui点击分页控件后滚动条置顶

    需求:当点击miniui的分页控件后(上一页.下一页.第一页.最后一页)后要求若滚动条没有置顶则自动置顶 解决方案之一: 通过百度发现js有自带的方法可以设置滚动条的位置具体如下: window.sc ...

  7. java分页导出excel_报表中利用API来实现导出excel列后分页

    在报表中,当统计报表统计的指标非常多,在页面上展现的时候,整个报表会变得非常的长,经常会通过设置滚动条拖拽来查看整个报表,当这时用不分页导出excel后,查看excel中报表被导出到一个sheet中, ...

  8. ES 查询示例 搜索 分组 去重 分页 排序

    es 查询示例 搜索 分组 去重 分页 排序 java 语句 @Autowiredprivate static RestHighLevelClient client;@PostConstructpub ...

  9. 使用group by后为什么要用聚合含函数

    前言 相信小伙伴写sql语句时,如果用到了group by分组后,那么其他未分组的 字段一定会用聚合函数,不然的话sql就会报错,下面就来看下为什么要这么使用 一.聚合函数是什么? 聚合函数:对一组值 ...

最新文章

  1. 米家电磁炉显示e10_小米“米家电磁炉C1”评测:7挡火力,2100W大功率设计
  2. python3 sys.stdin.readline input 区别
  3. 使用 OpenLDAP 集中管理用户帐号
  4. mysql level用法_MYSQL使用方法
  5. 挂机宝装mysql_挂机宝安装
  6. 信息学奥赛一本通C++语言——1110:查找特定的值
  7. c 语言 二进制转换为十进制,用c/c++语言将二进制转换为十进制,最好有例子。...
  8. 最短路径之Dijkstra算法
  9. 烤烟发病叶片高光谱特征分析
  10. Android已读未读功能,Android实现小圆点显示未读功能
  11. iOS开发需要哪些图片?
  12. R语言学习历程回顾总结
  13. Oracle 条件语句/循环语句
  14. 单片机拟真电路图软件_电路仿真软件有哪些?6款常用的电路仿真软件推荐
  15. 【转载】树莓派 Raspberry Pi Pico windows7 串口驱动
  16. 软件项目管理-——project 2019 专业版
  17. canvas画圆环(一)之渐变色,纯色
  18. php开启redis白屏,win10开机出现无限werfault错误怎么办?
  19. Windows成员服务器用户权利/本地策略审计
  20. Windows游戏编程快速入门方法

热门文章

  1. jieba 的Tokenizer分词器
  2. 带隙基准中运放相位裕度与增益裕度
  3. Ubuntu16.04安装谷歌chrome浏览器(最新)
  4. 网站是如何进行访问的
  5. gitcafe for Eclipse的环境配置
  6. 洛谷P4710 「物理」平抛运动 普及-
  7. 数据录入界面的设计!!
  8. 使用EventLog Analyzer监控、管理及分析日志
  9. HLA-Face: Joint High-Low Adaptation for Low Light Face Detection论文阅读笔记
  10. 金士顿16GB Class4 TF卡 和16GB Class10 TF卡有什么区别