elasticsearch翻页优化
ES 翻页优化
ES翻页
ES 翻页,有下面几种方案
from
+size
翻页scrool
翻页scrool scan
翻页search after
翻页
from
+ size
翻页
POST /xxx_index/_search
{"query": { "match_all": {}},"from": 100,"size": 10
}
使用 from
+ size
可进行翻页
from
参数定义了需要跳过的hits
数,默认 0size
参数定义了需要返回的hits
数目的最大值
ES 默认的单页查询最大限制(
max_result_window
)为10000。
该方案在翻页数目较多(即 from 较大)或者 size 特别大的情况,会出深翻页问题(deep pagination)。
该方案的优点
- 实现较为简单
- 可以指定任意合理的页码,实现跳页查询
该方案的缺点
- 深翻页时,耗时较长
scrool
翻页
scrool
翻页方案,主要用于「一次性查询大量的数据(甚至是全部数据)」,适合「非实时处理大量数据」的场景,该方案并不适合用来做「实时数据查询」。
- 第一次查询时,会生成一个
scrollId
,并将所有符合搜索条件的搜索结果缓存起来。注意,这里只是缓存的doc_id
,并不是真的缓存了所有的文档数据,取数据是在fetch
阶段完成的。
from
+ size
翻页方案中,我们可以指定任意合理的页码,实现跳页查询;但在 scroll
方案中,无法实现跳页面查询,因为该方案中除了第一次查询,其余的查询都需要上一次查询返回的 scrollId
。
该方案的优点
- 性能较好,适合一次性查询大量的数据
该方案的缺点
- 使用了
scrollId
,会占用大量的资源(特别是排序的请求) - 生成的
scrollId
是基于历史数据的快照,若此时数据发生了变化,则不会反映在快照上,所以不适合用作「实时数据查询」
scroll scan
翻页
scroll scan
方式在单纯 scroll
方式的基础上,进一步提升了性能,适合「非实时处理大量数据」的场景。
单纯的使用 scroll
方式查询,可支持排序。若使用 scroll
+ scan
的方式,则不支持排序。
search after
翻页
search after
是 ES 5 引入的一种分页查询机制,其原理和 scroll
类似。
- 请求时,会返回一个包含
sort
排序值的数组 - 在下一次请求时,可以将包含
sort
排序值的数组用于请求入参,以便抓取下一页的数据
该方案的优点
- 不需要维护
scrollId
,不需要维护快照,因此可以避免消耗大量的资源
该方案的缺点
- 至少需要指定一个唯一的不重复字段来排序
- 不适用于大幅度跳页查询,或者全量导出
翻页方案对比
翻页方式 | 性能 | 优点 | 缺点 | 场景 |
---|---|---|---|---|
from + size
|
低 | 灵活性好,简单实现 | 深度分页问题 |
数据量比较小, 能容忍深度分页问题 |
scroll
|
中 | 解决了深度分页问题 |
需要维护一个 scrollID (快照版本),无法反应数据的实时性;可排序,但无法跳页查询 |
查询海量数据 |
scroll scan
|
中 |
基于 scroll 方案,进一步提升了海量数据查询性能 |
无法排序,其余缺点同 | 查询海量数据 |
search after
|
高 |
性能最好,不存在深度分页的问题, 能够反映数据的实时变更 |
实现复杂,需要有一个全局唯一的字段。 连续分页的实现会比较复杂,因为每一次 查询都需要上次查询的结果。 |
不适用于大幅度跳页查询, 适用于海量数据分页 |
elasticsearch翻页优化相关推荐
- mysql+翻页性能,mysql 翻页优化
mysql翻页优化 对于翻页,我们通常是用 select fields from table limit 100,10 但是当要越翻后面的页数之后,耗时变得很长 select fields from ...
- elasticsearch翻页与深度翻页,以及获取全部数据
我们通常会有需求:根据指定条件,查询数据.并分页展示.甚至还有可能要导出全部的数据. 在工作中,经常会有需求,将指定条件的数据导出(这个数据量多数在2亿以上,有一次是18亿).导出数据的速度是挺慢的, ...
- 倒序查询_mysql大表分页查询翻页优化方案
mysql分页查询是先查询出来所有数据,然后跳过offset,取limit条记录,造成了越往后的页数,查询时间越长 一般优化思路是转换offset,让offset尽可能的小,最好能每次查询都是第一页, ...
- MySQL中的翻页优化和延迟缓存
limit offset,N 当offset非常大时,效率极低. 原因是:mysql并不是跳过offset行,然后单取N行.而是取offset+N行. 返回时,放弃前offset行,返回N行.效率较 ...
- mysql大翻页limt 1700,100慢优化方案
1.引言 公司有个需求,统计短信系统每天status没成功的电话号码,然后进行统计分析.为了省事,我直接用了现成的sql, 该sql是分页,每次筛选limit一百条,最后合并下,最后不就得出所有的手机 ...
- UE4 Material 101学习笔记——01-07 介绍/PBR基础/UV扭曲/数据类型/翻页动画/材质混合/性能优化
UE4 Material 101学习笔记--01-07 介绍/PBR基础/UV扭曲/数据类型/翻页动画/材质混合/性能优化 Lec 01 什么是着色器 What Is A Shader? 1.1 介绍 ...
- 总是搜不到想要的内容?Elasticsearch搜索排名优化了解一下
导语 | Elasticsearch(下文简称ES) 是当前热门的开源全文搜索引擎,利用它我们可以方便快捷搭建出搜索平台,但通用的配置还需要根据平台内容的具体情况做进一步优化,才能产生令用户满意的搜索 ...
- 大数据翻页_【干货】大数据翻页的难点和技巧
今天要讨论一个传统的问题,问题本身比较简单,就是针对大数据,如何优化方案做到性能与成本的平衡.我们经常会遇到一种Key-list类型数据, 如一个用户的好友关系 {"uid":{1 ...
- 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页
摘自:安卓APP_ Fragment(4)-- Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-20 17:46 ...
最新文章
- MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别
- Android mediaRecorder框架简述(二)
- IE下iframe跨域session和cookie失效问题的解决方案
- Lesson Plan 原文
- Grafana v6.0.0 发布,系统指标监控与分析平台
- 背包九讲Java版本
- java制作主页,JSP教程基础篇之简单首页制作
- 基于等离激元的空间微分
- 探讨“浩方对战平台”
- 直击2018互联网大裁员:繁花落地,一地鸡毛
- 函数feof使用注意事项
- OSChina 周日乱弹 ——颜值和代码水平是正比
- 什么是 Tableau?
- 彻底搞懂VGGNet-16
- 政考网:一年最多可以参加几次公务员考试?
- iphone11系列的尺寸_还有必要吗?iPhone 11系列终于要全家族支持双卡双待了
- Python Socket 编程详细介绍
- Windows和Ubuntu双系统双引导教程
- 中兴通讯智能手机生产链探秘
- 公式编辑,图片转公式,公式截图一键转换为word公式或者latex
热门文章
- python getattr和getattribute_python中__get__、__getattr__、__getattribute__详解
- 用Python爬取手机壁纸,太简单了吧!
- 银行发展待遇:总行VS分行
- MVVM数据双向绑定
- JQData | 利用区间极值法对牛熊市进行简单划分
- 邮递骑士服务器维护,服务器为什么是维护状态
- ACM 生涯指导 先转过来 心情好再看!干他!
- 程序员应该加入的3个QQ群
- GO语言的基本语法体结构
- Mysql索引知识概括