文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源:
- 免费赠送 经典图书 : 极致经典 + 社群大片好评 《 Java 高并发 三部曲 》 面试必备 + 大厂必备 + 涨薪必备
- 免费赠送 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 大厂必备 +涨薪必备 (加尼恩领取)
- 免费赠送 经典图书 : 《SpringCloud、Nginx高并发核心编程》 面试必备 + 大厂必备 + 涨薪必备 (加尼恩领取)
- 免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 (加尼恩领取)
| SpringCloud 微服务 精彩博文 | |
|---|---|
| nacos 实战(史上最全) | sentinel (史上最全+入门教程) |
| SpringCloud gateway (史上最全) | 分库分表sharding-jdbc底层原理与实操(史上最全,5W字长文,吐血推荐) |
ElasticSearch 深度分页 (史上最全)
说明:此文来自社群小伙伴的呼声
说明:
ElasticSearch 深度分页 是面试的高频题目,社群小伙伴要求,尼恩写个博客来介绍一下,于是,此文就出来了
三大ElasticSearch分页方式
-
传统方式(from&size)
顶部查询,查询10000以内的文档
场景:需要实时获取顶部的部分文档。eg: 例如查询最新的订单。
-
Scroll 滚动游标 方式
深度分页,用于非实时查询场景
eg:需要全部文档,例如导出全部数据 -
Search After
深度分页,用于实时查询场景注意es版本,低版本不能使用,具体见后文
from&size分页
POST movies/_search
{
"from": 10000,
"size": 10,
"query": {
"match_all": {
}
}
}
这是ElasticSearch最简单的分页查询 , from + size 为 10000 +10, 需要查询的文档从10000 到 10010
以上命令是会报错的。
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Result window is too large, from + size must be less than or equal to: [10000] but was [10001]. 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."
}
],
"type": "search_phase_execution_exception",
报错信息,指window默认是10000。
from&size为何不能获取10000个以上的文档
性能
为了性能,es限制了我们分页的深度,
es目前支持的最大的 max_result_window = 10000;
也就是说我们不能获取10000个以上的文档 , 当ES 分页查询超过一定的值(10000)后,会报错
怎么解决这个问题,首先能想到的就是调大这个window。
PUT movies/_settings
{
"index" : {
"max_result_window" : 20000
}
}
但这种方法只是暂时解决问题,当数据量越来越大,分页也越来越深,而且越会出OOM问题的。
from&size分页为何会OOM
协调节点或者客户端节点,需要讲请求发送到所有的分片
每个分片把from + size个结果,返回给协调节点或者客户端节点‘
协调节点或者客户端节点进行结果合并,如果有n个分片,则查询数据是 n * (from+size) , 如果from很大的话,会造成oom或者网络资源的浪费。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KimXpike-1647609673794)(https://segmentfault.com/img/bVbxJQD?w=706&h=412)]
例子
如请求第20页,Elas
Elasticsearch 深度分页:from&size、Scroll与SearchAfter详解

本文详细介绍了Elasticsearch中处理深度分页的三种方法:from&size、Scroll滚动游标和SearchAfter。from&size在大数据量时会导致性能问题和OOM,而Scroll适用于非实时的大数据导出,SearchAfter则适合实时查询并支持排序。文章还探讨了各种方法的优缺点及适用场景。
最低0.47元/天 解锁文章
2269

被折叠的 条评论
为什么被折叠?



