es深分页问题解决小记

SpringBoot整合SpringDataElasticsearch

ElasticsearchRestTemplate使用

ElasticSearch的scroll滚动查询以及在Springboot中的使用

ES三种查询

问题描述

在分页查询中,当查询数据总量超过10000时,es为了避免大量数据加载到内存导致内存溢出默认情况下会加限制最大1w条

当数量超过的时候会提示异常:

org.springframework.data.elasticsearch.RestStatusException: Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [52030]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [52030]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.]];

解决方案

可以使用滚动查询(Scroll API)来解决这个问题。其实原理也简单,就是将本次查询最后id当作下次查询条件,一直轮询,直到查询没数据就返回。

public void page(Req req) {NativeSearchQuery nsq = new NativeSearchQueryBuilder()//取消es中最大10000条限制.withTrackTotalHits(Boolean.TRUE).withQuery(assemblePageBoolQueryBuilder(req)).withSorts(SortBuilders.fieldSort("created_date").order(SortOrder.DESC)).withPageable(PageRequest.of(req.getPage(), req.getRows())).build();SearchScrollHits<MonitorOrderSearchEsDto> search = elasticsearchRestTemplate.searchScrollStart(60000, nsq, MonitorOrderSearchEsDto.class, ES_INDEX);//滚动id,记录当前查询的终止位置String scrollId = search.getScrollId();//快照在es缓存中保存时长,自定义long scrollTimeInMillis = 60 * 1000;//滚动次数,模拟分页数(page)int scrollTimes = 0;//当滚动查询无数据返回 或 滚动次数大于分页数,不再查询while (search.hasSearchHits() && scrollTimes < req.getPage()) {search = elasticsearchRestTemplate.searchScrollContinue(scrollId, scrollTimeInMillis, MonitorOrderSearchEsDto.class, ES_INDEX);//记录每次的滚动idscrollId = search.getScrollId();scrollTimes = scrollTimes + 1;}//因为es每次滚动查询会生成快照,需要清除当前滚动idelasticsearchRestTemplate.searchScrollClear(Collections.singletonList(scrollId));//业务处理...
}
  • 60000,只是一个示例的时间数据,该参数表明查询结果在es中保存时效时间
  • 需分别调用3个方法 searchScrollStartsearchScrollContinuesearchScrollClear

总结:

  1. 滚动查询是建立在普通查询基础上的
  2. 滚动查询相当于快照,如果在使用scroll进行滚动查询期间有所增删改操作,那么查询结果不会同步最新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vmware虚拟机安装ubuntu20.04

1.下载Ubuntu 20.04的ISO镜像 Index of /ubuntu-releases/ 2.安装VMware 3.创建新的虚拟机&#xff1a;打开VMware&#xff0c;选择“创建新的虚拟机”或通过文件菜单新建虚拟机。 4.选择典型&#xff0c;然点点击下一步&#xff1a; 5.选择稍后安装操作系统&#xff1a; 6.…

密码学及其应用 —— 密码学概述

1 安全属性和机制 1.1 基本概念 1.1.1 三个核心概念 在讨论信息安全时&#xff0c;我们通常会谈到三个核心概念&#xff1a;保密性、完整性和可用性。这三个概念共同构成了信息安全的基础。 保密性&#xff1a;指的是确保信息只能被授权的人员访问。这就意味着信息在存储、传…

jnp.diag

jnp.diag 是 JAX 库中用于创建对角矩阵或提取对角线元素的函数。具体功能取决于输入的形状&#xff1a; 当输入是一维数组时&#xff0c;jnp.diag 创建一个以该数组为对角线元素的对角矩阵。当输入是二维数组时&#xff0c;jnp.diag 提取并返回对角线元素。 函数签名 jnp.di…

【软件工程】【22.04】p1

关键字&#xff1a; 软件需求规约基本性质、数据字典构成、内聚程度最高功能内聚、公有属性、RUP实体类、评审、测试序列、软件确认过程、CMMI能力等级 软件需求分类、DFD数据流图组成&#xff08;实体&#xff09;、经典详细设计、数据耦合、关联多重性、状态图、黑盒测试、…

【LinuxC语言】进程间的通信——管道

文章目录 前言不同进程间通信的方式管道匿名管道和命名管道半双工与全双工管道相关函数创建管道总结前言 在Linux操作系统中,进程是执行中的程序的实例。每个进程都有自己的地址空间,数据栈以及其他用于跟踪进程执行的辅助数据。操作系统管理这些进程,并通过调度算法来分享…

设计模式——设计模式原则

设计模式 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 设计模式原则 单一职责原则&#xff08;SPS&#xff09;&#xff1a; 又称单一功能原则&#xff0c;面向对象五个基本原则&#xff08;SOLID&#xff09;之一 原则定义&#xf…

tinyxml

github下载相关的软件包&#xff0c;其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp&#xff0c;tinyxml12.h&#xff0c;rss网页xml文件&#xff0c;还有就是官方给的test文件tinyxmltest.cpp。 example1就是提供一个打开文件的方式 int example_1() {XMLDocument …

方法区讲解

栈、堆、方法区三者之间的关系如上图所示&#xff0c; 第一个Student代表类型&#xff0c;存放在方法区中&#xff0c; student 变量是在虚拟机栈中&#xff0c;最后 new 出来的Student对象放在堆中。本篇主要讲一下有关方法区中的知识。 文章目录 概念方法区的内部结构方法区的…

6.25世界白癜风日·成都博润白癜风医院获评“成都市医学重点专科”

夏日热情如江潮&#xff0c;勇攀高峰正当时。为激发新质生产力&#xff0c;驱动学术研究引领医院发展&#xff0c;也为了迎接 6.25 世界白癜风日。 6月22日&#xff0c;成都博润白癜风医院隆重举行成都市医学重点专科授牌新闻发布会暨成都市市级继续医学教育项目《难治性白癜风…

Cesium总目录

文章目录 Cesium全家桶总目录1 MyCesiumJS Basic1.1 使用Vite搭建开发环境1.2 加载在线瓦片地图数据1.3 加载离线地图数据1.4 加载多种格式外部数据1.5 卫星云图轮播1.6 浏览器控制台查看位置角度 2 MyCesiumJS Pro2.1 空间碎片2.2 变色龙2.3 万家灯火2.4 火星2.5 变色龙II2.6 …

LeetCode——判断回文数

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#xff0c;而 …

【招聘贴】JAVA后端·唯品会·BASE新加坡

作者|老夏&#xff08;题图&#xff1a;公司业务介绍页&#xff09; “ 请注意&#xff0c;这两个岗是BASE新加坡的&#xff0c;欢迎推荐给身边需要的朋友&#xff08;特别是在新加坡的&#xff09;。” VIP海外业务-产品技术团队&#xff0c;这两个岗位属于后端工程组的岗&…

每日待办事项提醒用什么便签app比较好?

在快节奏的现代生活中&#xff0c;我们经常需要记住各种事项&#xff0c;如会议、预约、购物清单等。这时&#xff0c;一个高效的便签App就显得尤为重要&#xff0c;可以帮助我们有效地管理日常任务和待办事项。而每日待办事项提醒用什么便签app比较好&#xff1f;面对市场上众…

C++程序设计基础实践:学生信息管理系统

目录 1 系统介绍 2 系统设计 3 设计结果 4 源代码 近来有空闲&#xff0c;把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正&#xff0c;有更好的方法也期待您的分享~ 实验要求 本课程要完成一个学生信息管理系统的设计与实现&#xff0c;可实现对于学生信息…

“三巫日”大结局:标普500尾盘成交量飙升,英伟达“过山车”终以下跌收盘

内容提要 隔夜“美股三巫日”&#xff0c;美国证券交易所迎来了180亿股的换手&#xff0c;较过去三个月的平均水平激增55%&#xff0c;标普500尾盘成交量比平日激增30%。在周五到期的5.5万亿美元各类证券衍生品里&#xff0c;与英伟达相关的衍生品合约价值高居第二&#xff0c…

upload-labs实验过程中遇到的问题

第6题问题&#xff1a;500异常码 发现500异常码&#xff0c;这个应该是apache版本问题&#xff0c;可更换其他版本&#xff0c;或者更换为nginx 12题问题&#xff1a;上传出错 出现上传错误&#xff0c;大概率是php版本问题&#xff0c;需要下载php5.2.17版本的php或者更换其他…

编程书籍的枯燥真相:你也有同样的感受吗?

讲动人的故事,写懂人的代码 我得实话实说,你可能已经发现市面上的大部分编程入门书籍有些枯燥。这个问题的根源在于许多作者把本应该充满乐趣和吸引力的入门指南,写得就像一本沉闷的参考手册。这就好比把一本充满冒险和乐趣的旅行日记,写成了一本单调乏味的字典。 我完全理…

代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]

代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ] 一、121. 买卖股票的最佳时机 链接: 代码随想录. 思路&#xff1a;dp[i][0] 第i天持有股票的最大利润 dp[i][1] 第i天不持有股票的最大利润 做题状态&#xff1a;…

开放式耳机有什么好处?推荐几款开放式蓝牙耳机

现在开放式蓝牙耳机面市,迅速占领了市场一席之地后。各大品牌商纷纷参与研制,开放蓝牙耳机与的竞争日趋激烈。这种开放式耳机崛起的速度,连我作为一个数码博主都得感叹一句绝了&#xff0c;所以我花了大几千块&#xff0c;又买了现在很热门的五款开放式耳机&#xff0c;这篇收集…

深度学习:关于损失函数的一些前置知识(PyTorch Loss)

在之前进行实验的时候发现&#xff1a;调用 Pytorch 中的 Loss 函数之前如果对其没有一定的了解&#xff0c;可能会影响实验效果和调试效率。以 CrossEntropyLoss 为例&#xff0c;最初设计实验的时候没有注意到该函数默认返回的是均值&#xff0c;以为是总和&#xff0c;于是最…