ElasticSearch之通过search after和scroll解决深度分页问题

写在前面

通过from,size来进行分页查询时,如下:
在这里插入图片描述
当from比较大时会有深度分页问题,问题产生的核心是coordinate node需要从每个分片中获取from+size条数据,当from比较大,整体需要获取的数据量也会比较大,如下图:
在这里插入图片描述
所以es深度分页问题的核心就在于每个分片多需要返回from+size条数据,所以,如果能解决这个问题,也就解决深度分页的问题了。

但es针对from size方式的深度分页问题也是提供了一定的应对措施的,比如通过参数index.max_result_window,默认是10000条,如下超过1万条时将会报错:

  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述

并且,为了更好的解决深度分页问题,es同时提供了search after和scroll两种方式来解决深度分页,其中前者是通过定位到某个数据的方式来解决,后者是通过创建快照的方式来解决。

分别看下。

1:search after

search after是实时分页,并且要求sort的字段必须是唯一的(多个sort字段组合在一起唯一也可),所以一般我们在使用search after时,会在不影响业务要求的排序基础上将_id也加上去,如下:

  • 格式
{"size": "size值","query": {具体的chaxun},"search_after": [上一个sort 的结果]",”sort“: [sort数组]
}
  • 实例
    在这里插入图片描述

为了测试,我们先来准备测试数据:

DELETE usersPOST users/_doc
{"name":"user1","age":10}POST users/_doc
{"name":"user2","age":11}POST users/_doc
{"name":"user3","age":12}POST users/_doc
{"name":"user4","age":13}// "count" : 4,
GET users/_count
  • 查询第一页的数据

此时需要使用from size来查询

POST users/_search
{"from": 0,"size": 1,"query": {"match_all": {}},"sort": [{"age": "desc"},{"_id": "asc"}]
}

取结果中的sort值作为查询下一页数据的入参:
在这里插入图片描述

  • 查询下一页
POST users/_search
{"size": 1,"query": {"match_all": {}},"search_after":  [13,"z-cxE44BbPrZSKsI0wh6"],"sort": [{"age": "desc"},{"_id": "asc"}]
}

如此重复直到没有下一页:
在这里插入图片描述

search after通过每次从每个分片获取from+size的数据量变为size来解决了深度分页的问题,如下图:
在这里插入图片描述

2:scroll api

scroll api通过快照的方式来解决深度分页问题,即第一次查询时会生成一个全量数据的快照,因此快照生成后的数据将无法被查询,这种方式一般用于数据导出等场景中。
在这里插入图片描述

看例子。

  • 准备数据
DELETE usersPOST users/_doc
{"name":"user1","age":10}POST users/_doc
{"name":"user2","age":11}POST users/_doc
{"name":"user3","age":12}POST users/_doc
{"name":"user4","age":13}
  • 创建scroll快照,五分钟失效
POST users/_search?scroll=5m
{"size": 1,"query": {"match_all": {}}
}

在这里插入图片描述

  • 查询下一页
POST /_search/scroll
{"scroll": "1m","scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAhesWUk9pVDk4SUdSUXEyRGlhc21kVDJUZw=="
}

一直查询到没有下一页:
在这里插入图片描述
再来插入一条:

POST users/_doc
{"name":"user5","age":14}

因为读的是快照,所以是查不到的。

写在后面

参考文章列表

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

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

相关文章

MongoDB安装教程(附带安装包)

目录 解压安装包 傻瓜式安装 选择安装目录 安装完成 启动验证 验证成功 解压安装包 选择所需要的进行安装 傻瓜式安装 选择安装目录 安装完成 启动验证 mongod --dbpathD:\mongodb\data\db 验证成功

vue 使用谷歌地图 @googlemaps/js-api-loader 进行模糊搜索

<template><div class"map"><div class"mapLeftStyle"><el-inputv-model"input"placeholder"请输入内容"class"controls"input"chnageinput"><i slot"prefix" class"e…

关于JVM的小总结(待补充)

JVM组成及他们之间的关系 装载类子系统字节码执行引擎运行时数据区 装载类子系统 类加载器字节码调节器类加载运行时数据区 字节码执行引擎 运行时数据区 线程私有 虚拟机栈本地方法栈程序计数器 线程共享 堆方法区&#xff08;元空间&#xff09;

SpringBoot配置加载顺序和SpringBoot分离打包:将jar包与lib依赖、配置文件分开

文章目录 一、SpringBoot配置加载顺序1.SpringBoot配置优先级&#xff08;1&#xff09;命令行参数&#xff08;2&#xff09;配置文件 二、SpringBoot分离打包&#xff1a;将jar包与lib依赖、配置文件分开1.pom文件配置2.打包后的目录结构 一、SpringBoot配置加载顺序 官方文…

是什么短波与超短波通信,水利短波通信系统详解

1、短波通信 频率在3—30MHZ。依靠无线电波从电离层反射传播实现通信。实际使用的工作频率与通信线路长度及地理位置有关&#xff0c;而且随昼夜、季节和太阳黑子活动周期而变。 短波通信易受电离层骚扰等活动的影响&#xff0c;而且频率拥挤&#xff0c;干扰严重&#xff0c;通…

vue实现文字手工动态打出效果

vue实现文字手工动态打出效果 问题背景 本文实现vue中&#xff0c;动态生成文字手动打出效果。 问题分析 话不多说&#xff0c;直接上代码&#xff1a; <template><main><button click"makeText"><p class"text">点击生成内容…

SAM多目标跟踪与分割TAM论文解读Track Anything: Segment Anything Meets Videos

一、总结 1. 简介 发表时间&#xff1a;2023年4月28日 论文&#xff1a;[2304.11968] Track Anything: Segment Anything Meets Videos (arxiv.org)https://arxiv.org/abs/2304.11968代码&#xff1a;gaomingqi/Track-Anything: Track-Anything is a flexible and interacti…

javascript正则深入

文章目录 一、前言二、高级`API`2.1、模式匹配的用法`(x)`2.2、非捕获括号的模式匹配`(?:x)`2.3、先行断言`x(?=y)`2.4、后行断言`(?<=y)x`2.5、正向否定查找`x(?!y)`2.6、反向否定查找`(?<!y)x`2.7、字符集合和反向字符集合的用法 `[xyz] / [^xyz]`2.8、词边界和非…

MacOS包管理工具homebrew使用教程

MacOS包管理工具homebrew使用教程 1.概述与安装2.基本使用3.其他常用命令 1.概述与安装 homebrew是Mac OS X上的强大的包管理工具&#xff0c;可以高效管理各种软件包 安装&#xff1a; 1、安装xcode&#xff1a; xcode-select --install2、一行命令下载&#xff1a; /bin…

四川宏博蓬达法律咨询:专业领航,法治路上的坚实后盾

在法治社会中&#xff0c;法律咨询服务扮演着举足轻重的角色。四川宏博蓬达法律咨询&#xff0c;作为业界的佼佼者&#xff0c;以其正规可靠的服务赢得了广大客户的信赖和好评。今天&#xff0c;我们就来一起了解一下这家在法律服务领域备受赞誉的企业。 一、正规资质&#xff…

Java Day5 常用API

文章目录 1、Math2、System3、Runtime4、BigDecimal5、Date日期6、SimpleDateFormat 1、Math double s1.2;System.out.println(Math.ceil(s));//2.0System.out.println(Math.floor(s));//1.0int a-1;System.out.println(Math.abs(a));//1System.out.println(Math.pow(2, 2));//…

【数据结构与算法】二分查找题解(二)

这里写目录标题 一、81. 搜索旋转排序数组 II二、167. 两数之和 II - 输入有序数组三、441. 排列硬币四、374. 猜数字大小五、367. 有效的完全平方数六、69. x 的平方根 一、81. 搜索旋转排序数组 II 中等 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必…