三种分页方式

1,from size

2,scroll分页

3,使用 search_after 进行分页

可参考:https://blog.csdn.net/zzh920625/article/details/84593590

对比

使用search_after 进行分页 相比from&size的方式要更加高效,而且在不断有新数据入库的时候仅仅使用from和size分页会有重复的情况
相比使用scroll分页,search_after可以进行实时的查询
不过search_after不适合跳跃式的分页

注意事项

1,类似mysql limit offset size,进行分页查询时,取上一页最后一条数据的id;

2,如果是多个字段排序的话,search_after值的顺序要与我们排序条件的顺序一致,此处ID倒序

3,使用search_after时 from设置为0,-1或者直接不加from

请求参数

{
    "purchaseOrgCodes":[
        "P001"
    ],
    "page":3,
    "size":200,
    "scrollId":"W0M3_534206"
}

代码如下

 private SearchRequest buildSearchRequest(EsSchemel esSchemel, QueryBuilder params, int pageSize, String orderBy, String scrollId) {if (pageSize > 10000) {//fixed:es error,from + size must be less than or equal to: [10000]pageSize = 10000;}SearchRequest searchRequest = new SearchRequest(esSchemel.getIndex());searchRequest.types(esSchemel.getType());SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(params);//sourceBuilder.from(pageNo - 1);sourceBuilder.size(pageSize);sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));if (esSchemel.getSelectCols() != null && esSchemel.getSelectCols().length > 0) {//性能参数,减少iosourceBuilder.fetchSource(esSchemel.getSelectCols(), EXCLUDEFIELDS);}if (!Strings.isNullOrEmpty(orderBy)) {sourceBuilder.sort(new FieldSortBuilder(orderBy).order(SortOrder.DESC));if (!Strings.isNullOrEmpty(scrollId)) {sourceBuilder.searchAfter(new Object[]{scrollId});}}searchRequest.source(sourceBuilder);return searchRequest;}

es分页方式search_after相关推荐

  1. ES分页查询时报错“Result window is too large ...”

    ES分页查询时报错"Result window is too large ..." 问题出现缘由 报错详情 错误译文 解决办法 问题出现缘由 ES 中存储了索引数据,使用 ES 可 ...

  2. mysql sqlserver分页_SQLServer常用分页方式

    mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试. 0.原来的SQL的所有数据 下面 ...

  3. java 操作 ES 的方式 整理总结

    一.操作ES 的方式大题有这么三种 1. TransportClinet客户端 2. REST Client 3. SpringDateES 二.第一种 TransportClinet客户端 首先要讲 ...

  4. sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...

  5. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...

  6. oracle分页的三种方式,oracle 使用rownum的三种分页方式

    rownum是Oracle数据库中的一个特有关键字,返回的是一个数字代表记录的行号. 基础知识:rownum只能做 获取51到100的数据 三种分页的写法: 1.使用minus,原理就是查询出前100 ...

  7. 黑马博客——详细步骤(八)项目功能的实现之另一种分页方式【mongoose-sex-page】

    4.另一种分页方式:mongoose-sex-page(第三方模块) 上一页和下一页

  8. mysql describe 分页_mysql之分页方式了解

    mysql之分页方式了解: 分页通常我们想到的sql: 第一种方法: select * from tbl limt start_num,end_num; 但是随着tbl数据量的增加,给检索的分页数据会 ...

  9. Mybatis的5种分页方式

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-/ ...

  10. 数据库的常用分页方式

    数据库的分页方式 数据库的分页方式,优化加快了服务端数据的反馈:这里总结了常见的数据库的分页模式示例: 1.最简单便利的数据库: MYSQL select * from TABLE limit (cu ...

最新文章

  1. 【python学习】模块random
  2. docker build 变量_DockerFile 设置环境变量
  3. 视觉SLAM笔记(6) 坐标系
  4. angular下拉框点击无反应_angular 实现 下拉菜单 的 点击其他区域关闭下拉菜单功能?...
  5. 赛前集训前的总结(警醒)
  6. 【Axure RP8.1】一款专业的快速原型设计工具
  7. 翻车了!StackOverflow上复制最多的代码存在缺陷!
  8. Chromium学习笔记
  9. 音乐播放小窗口html,jQuery+html5迷你网页音乐播放器代码
  10. 我是如何用百度知道做小众企业站流量推广的?
  11. Unity Shader数学基础——矩阵
  12. android 手机2k分辨率,2K屏幕手机有哪些 2016六款2K分辨率手机推荐
  13. 【黑灰产犯罪研究】DDOS攻击
  14. 视频教程-深入浅出 Zabbix 4.0(基于 zabbix 4.2)-Linux
  15. VS2019CPU/内存诊断功能
  16. Numpy中数据的常用的保存与读取方法
  17. vue动画transition
  18. 74LS244芯片介绍
  19. 四十二、SPSS方差分析,相关分析和回归分析
  20. Selenium的安装与卸载

热门文章

  1. 服务器宕机可能的原因以及服务器宕机解决办法
  2. 或许是介绍Android Studio使用Git最详细的文章
  3. BYOD时代无线安全成企业关注焦点
  4. 红帽全年总营收24亿美元,同比增长18%
  5. 03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素
  6. 问题处理:VMware Workstation和Device / Credential Guard不兼容
  7. KE之undefinded instruction问题记录
  8. 实现透明防火墙的必备知识-Bridge Filter半景
  9. Camera ISP流程概述
  10. 如何从wireshark 抓包中的RTP导出 H.264 PAYLOAD,变成可用暴风直接播放的H264 裸码流文件