elasticSearch 实现分页查询(过万跳页实现方案)

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

分页方式

  • from size 分页(存在1W数据上限限制,当然也可以释放)
  • scroll 滚动查询
  • search_after 分页查询
  • from size 支持跳页的伪分页查询

前三种分页方式就不给出具体的实现了,这里主要讲解第四种 《from size 支持跳页的伪分页查询》文章来源地址https://www.toymoban.com/news/detail-669670.html

《from size 支持跳页的伪分页查询》

中心思想:添加查询条件
限制:必须存在唯一且有序的字段或者多个字段能够组成一个唯一且有序的条件,再加上排序
假设和需求:es 数据查询最大上限为1万条,但符合条件的数据存在5万条,需要将5万的数据分页查询出来,并且支持跳页
解:
Mapping设计:存在一个字段id,特点是自增的,对应限制条件
查询:设置size大小为200,用id asc 排序,现存数据的id是从1-50000.
    以下将是模拟查询的数据,pageNumber:当前页,pageSize:每页大小,endId:每页最后一条数据的id
     {pageNumber:1,pageSize:200,endId:200}
     {pageNumber:2,pageSize:200,endId:400}
     {pageNumber:3,pageSize:200,endId:600}
     ... 跳页到30 页(此时的数据量在1万以内)
     {pageNumber:30,pageSize:200,endId:6000}
     {pageNumber:31,pageSize:200,endId:6200}
     {pageNumber:32,pageSize:200,endId:6400}
     ... 跳页到第60页(此时的数据量已经超过了1万)
     {pageNumber:60,pageSize:200,endId:1200} >> 执行该查询时es会给出错误,此时就要启用伪分页查询
     -----------------------------------------------------------------------------------------------------------------------------------------
     伪分页:
     	我们是通过第32页直接跳转到第60页,第32页的endId为6400,且总共查询了skilTotal=32*200=6400条数据,
     	如果我们想要查询出第60页的数据,就必须保证符合条件的数据量小于es的可查询数量量阀值1万,
     	我们可以将第32页的最后一条数据的endId:6400作为查询第60页数据的条件,
     	注意:排序是id asc,那么我们就可以在原有的查询条件基础上添加新的条件,id>6400
     	此时,from=pageSize*pageNumber-skilTotal=200*60-(32*200)=5600,size=200
     	对应的伪dsl: {"query":{"bool":{"must":[{原来的查询条件},{"bool":{"must":[{"range":{"id":{"from":6400}}}]}}]}}}
     	注:此时的total会比原来的total少skilTotal条数据,so:加上skilTotal就成了
     	在注:用第32页的endId作为条件,我们最多能查询到第16400条数据,因此pageNumber最大为82,故:最大的跳转页=82
     	想要跳转到83页,必须先跳转到33页,将83页的数据包含到阀值数据内,如此往复,就完成了向右跳页查询
     左跳页:
     		上边讲的是右跳页查询,左跳页是虚假的左跳页,实际上还是一个右跳页处理逻辑。
     		假设,我们目前在60页,我们想要跳转到40页,因为40页的数据在1w内,所以无需添加endId 条件
     		假设,我们目前在60页,我们想要跳转到59页,
     			我们跳转到60页时用的前置条件是32页提供的,此时我们跳转到59页,可以同样使用32页提供的前置条件。
     ----------------------------------------------------------------------------------------------------------------------------------------- 

到了这里,关于elasticSearch 实现分页查询(过万跳页实现方案)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【ElasticSearch】JavaRestClient实现文档查询、排序、分页、高亮

    先初始化JavaRestClient对象: 代码和DSL对应上就是: 运行结果: 然后是对结果的解析,对照响应结果: 示例代码: 运行结果: 总结: 构建DSL是通过HighLevelRestClient中的resource()方法来实现的,这里包含了查询、排序、分页、高亮等操作 构建查询条件的核心部分,即查询类型,

    2024年02月14日
    浏览(47)
  • ES(Elasticsearch)+SpringBoot实现分页查询

    1.ES介绍   ES作为一个搜索工具,寄托于Lucene之上,提供了方便的数据存储和搜索服务,一般的用它来作为网页数据索引以及存储用户画像(即用户标签)数据,可以提供复具有复杂的查询条件的服务。例如在网页索引中,通过倒排的方式索引的方式,对文档进行分词存储,

    2024年02月16日
    浏览(48)
  • SpringBoot 整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮

    准备一个空的SpringBoot项目 写入依赖 注意你的SpringBoot和你的es版本,一定要对应,如果不知道的可以查看这篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安装es请看这篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    浏览(53)
  • SpringBoot ElasticSearch 实现订单的分页查询 【SpringBoot系列17】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海

    2024年02月09日
    浏览(44)
  • Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询

    pom.xml引入ElasticSearch application.yml配置 启动类加入注解@EnableElasticsearchRepositories ElasticSearchEntity Repository类继承ElasticsearchRepository ElasticSearchService ElasticSearchController 测试 查看创建的索引(相当于MySQL的表) method:GET 删除索引 method:DELETE 查看索引里的全部数据, elastic是实体类

    2023年04月18日
    浏览(51)
  • SpringBoot整合Elasticsearch实现分页条件查询及注意事项

    项目环境: springboot 2.3.7.RELEASE es 6.8.3 这里需要注意es中日期格式,ES默认是不支持yyyy-MM-dd HH:mm:ss格式的,需要通过 @Field(type = FieldType.Date, format = DateFormat.custom,pattern = \\\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_second\\\") 来指定日期格式。 直接看业务层实现分页条件查询: 范围查询: es en

    2023年04月16日
    浏览(50)
  • ES es Elasticsearch 十三 Java api 实现搜索 分页查询 复杂查询 过滤查询 ids查询 等

    目录 Java api 实现搜索 Pom.xml 建立链接 搜索全部记录 增加规则值查某些字段 搜索分页 全代码 Ids 搜索 搜索Match搜索 multi_match 搜索 多字段搜索 复杂查询 bool查询 filter  bool 复杂查询增加过滤器查询 复杂擦好像加排序 日志 思路 参考 api 写法 写Java代码 请求条件构建层次

    2024年02月04日
    浏览(60)
  • Spring Boot 集成 ElasticSearch:实现模糊查询、批量 CRUD、排序、分页和高亮功能

    文章来源:https://blog.csdn.net/qq_52355487/article/details/123805713 在pom.xml里加入如下依赖 非常重要:检查依赖版本是否与你当前所用的版本是否一致,如果不一致,会连接失败! 1.创建、判断存在、删除索引 2.对文档的CRUD 创建文档: 注意:如果添加时不指定文档ID,他就会随机生成

    2024年02月04日
    浏览(42)
  • 【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理

    在 Elasticsearch 中,通过 RestAPI 进行 DSL 查询语句的构建通常是通过 HighLevelRestClient 中的 resource() 方法来实现的。该方法包含了查询、排序、分页、高亮等所有功能,为构建复杂的查询提供了便捷的接口。 RestAPI 中构建查询条件的核心部分是由一个名为 QueryBuilders 的工具类提供

    2024年01月16日
    浏览(63)
  • ElasticSearch分页查询

    一、ES支持的三种分页查询方式 From + Size 查询 Scroll 遍历查询 Search After 查询 二、分布式系统中的深度分页问题 为什么分布式存储系统中对深度分页支持都不怎么友好呢? 首先我们看一下分布式存储系统中分页查询的过程。 假设在一个有 4 个主分片的索引中搜索,每页返回

    2024年02月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包