首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ES三周年】ES查询—海量数据搜索深度分页优化

例如ES 共有 4 个shard,并且每个shard没有副本。假如分页的大小为 10,想取第11 页的内容。则对应的 from = 100,size = 10。...缺点 查询分页受限于max_result_window设置,不能无限制翻页。 查询分页性能不稳定,越往后翻页越慢,存在深度翻页问题。...这个分页的用法,不是为了实时查询数据,而是为了一次性查询大量的数据(甚至是全量数据)。...图片 在 7.10以后 版本中,ES官方 不再推荐使用Scroll方法来进行深分页,而是推荐使用带PIT的 search_after 来进行查询。 图片 PIT可以被看为存储索引数据状态的轻量级视图。...constant.CodeErrEsSearchFail, "SearchAfter Do error: %w", err.Error()) } return esResult, nil } 总结 图片 项目数据量比较小,能容忍深度分页问题时使用

3.5K219

上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

面试题 & 真实经历 面试题:在数据量很大的情况下,怎么实现深度分页?...惨痛的教训 首先必须明确一点:深度分页可以做,但是深度随机跳页绝对需要禁止。 上一张图: [1734e4083013095f?...为什么不能允许随机深度跳页 从技术的角度浅显的聊一聊为什么不能允许随机深度跳页,或者说为什么不建议深度分页 MySQL 分页的基本原理: SELECT * FROM test ORDER BY id DESC...ElasticSearch 从业务的角度来说,ElasticSearch不是典型的数据库,它是一个搜索引擎,如果在筛选条件下没有搜索出想要的数据,继续深度分页也不会找到想要的数据,退一步讲,假如我们把ES...因此我们在处理MySQL,ES,MongoDB时,也可以采用一样的办法: 限制获取的字段,只通过筛选条件,深度分页获取主键ID 通过主键ID定向查询需要的数据 瑕疵:当偏移量非常大时,耗时较长,如文中的

1.3K00

ES分页看这篇就够了

使用起来很简单,不过ES默认的分页深度是10000,也就是说from+size超过10000就会报错,我们可以试下,会报下面的错误: { "error": { "root_cause": [...ES内部是通过index.max_result_window这个参数控制分页深度的,我们可以针对特定的索引来修改这个值。...事实上,ES之所以有这个限制,是因为在分布式环境下深度分页的查询效率会非常低。比如我们现在查询第from=990,size=10这样的条件,这个在业务层就是查询第990页,每页展示10条数据。...所以分页越深,ES处理的开销就大,占用内存就越大。 ? 2. search after方案 有时候我们会遇到一些业务场景,需要进行很深度分页,但是可以不指定页数翻页,只要可以实时请求下一页就行。...ES为这种场景提供了一种解决方案:search after。

24K71

如何跳过es分页这个坑?

1、分页查询 1.1、 正常分页查询代码如下 假设现在你要查询第100页的10条数据,但是对于es来说,from=1000000,size=100,这时 es需要从各个分片上查询出来10000100条数据...这只是允许你更进一步深度分页,却没有从根本上解决深度分页的问题,而且随着页码的增加,系统资源占用成指数级上升,很容易就会出现OOM。...这时如果你的产品经理要求你按照常规的做法去分页,你可以很明确的告诉他,你的系统不支持这么深度分页,翻的越深,性能也就越差。...##7、 总结: es分页查询不支持深度分页,如果偏要使用要结合具体业务场景进行使用。不能当成关系型数据库中的分页进行使用。...要想提高产品体验和查询效率不能过于依赖技术,要结合需求进行分析以提高体验,因为很多搜索类产品都不支持深度分页

5.2K50

Elasticsearch深度分页方案

Elasticsearch 中的深度分页(deep pagination)是一个常见但挑战性的问题。深度分页是指从搜索结果中检索距离起始位置很远的页面,例如第100页或更远的页面。...在 Elasticsearch 中处理深度分页时,需要考虑性能和效率问题。 ◆ 以下是几种常见的解决方案和策略: 1....Search After 为了提高深度分页的性能,可以使用search_after 参数。这个方法允许在上一个查询的最后一个文档之后继续搜索,而不是从头开始。...Elasticsearch 7.10 引入了 PIT(Point In Time) API,用于保持搜索上下文的稳定性,这对于深度分页非常有用。它保证了在分页过程中索引的变更不会影响结果的一致性。...在许多应用场景中,避免深度分页可能是最好的策略。例如,可以通过改进搜索算法和结果的相关性来限制用户必须翻阅的页面数,或者提供更精确的过滤器来缩小结果集。 对查询本身进行优化也可以提高深度分页的效率。

24200

ElasticSearch 深度分页总结

```ElasticSearch``` 分页总结 ElasticSearch 是搜索引擎,从搜索的意义上来说,如果筛选条件或前几页都找不到需要的数据,继续深度分页也不会找到想要的数据。...ElasticSearch 不要做深度分页和随机深度跳页。...ES 分页建议 增加默认的筛选条件,尽量减少数据量的展示,比如:最近一个月; 限制总分页数,比如:淘宝、京东仅显示100页查询结果,百度仅显示76页; 修改跳页的展现方式,改为滚动显示,或小范围跳页,比如...ES 三种分页比较 from+size:适用于浅分页(数据量小于max_result_window),在增大max_result_window情况下,也可实现深度分页,但效率低下,可能出现 OOM。...elasticsearch-sql 分页 分页(limit):深度跳页和深度随机跳页无法实现,但可做限制页数+小范围跳页的替代方案。

1.2K40

pageHelper分页失效解决方案

前言       pageHelper是一款优秀的Mybatis分页插件,在项目中可以非常便利的使用,使开发效率得到很大的提升,但不支持一对多结果映射的分页查询,所以在平时的使用时,对于一对多分页会出现分页错误...,这篇文章主要对pageHelper分页错误进行重现以及提出解决方案。...,然后自动将limit拼接到sql语句末尾进行分页,由于左连接查询时,连接条件on条件不唯一(即一对多)时,结果会产生笛卡尔积,所以经过pagehelper插件分页得到的记录总数和分页结果并不是预期的结果...pageHelper插件拼接后的sql语句就不会输出正确的结果,更不会输出符合期望的结果 2. pageHelper插件分两步查询,第一步查询出记录总数,第二步查询出分页结果 解决方案 方案一 思路:先分页查询出...Parameters: 5(Integer) Total: 0 方案三 思路:弃用pageHelper插件,自定义分页查询,先对主表(user)进行分页,并把分页结果作为虚拟表与副表(address)进行左连接查询

4.9K31

MySQL-深度分页如何优化

场景举例 查询文章列表,一直滑动翻页,不用跳转到指定页数 从数据库查询百万客户数据写入到redis 访问某小程序的积分商城查看商品,一直滑动翻页,不用跳转到指定页数 问题分析 深度分页SQL SELECT...* FROM 表名 WHERE 条件 LIMIT #{offset},#{pageSize} 深度分页造成的结果,offset越来越大,回表的记录越来越多,SQL查询性能急剧下降,会出现大量的慢SQL...比如针对非主键索引判断再分页那么使用主键id查找不满足需求 把主键id暴露出去了,这个本身不应该是业务层面关心的字段 方法二:子查询 先查询出所需要的数据的主键id,因为在非聚集索引中每个叶子节点记录的数据为其...然后再去主键索引中查询 select * from t where id in (select id from t where age > 10 offset 10000 limit 10) 优点 维持了分页需求

46230

OpenGL ES for Android 深度测试

什么是深度 深度就像是现实世界中物体与我们自己之间的距离,而在OpenGL中,深度是像素点(可以理解为现实世界中的物体)距离相机的距离,深度信息保存在深度缓存中,深度值越大则离相机越远。...深度测试有什么作用 在OpenGL ES中默认是不开启深度测试的,不使用深度测试的时候,先绘制较近的物体,然后绘制较远的物体,当远处的物体和近处的物体出现重叠时导致近处的物体被远处的物体遮挡,这不符合实际的现象...深度测试则是可以解决这种问题,开启深度测试后,深度缓存中存储着的每个像素点都包含深度信息,当绘制新的像素时,先和深度缓存中的深度值进行比较,当深度值比深度缓存中的深度值大时(也就是离相机远)则使用原来大颜色值绘制...启用深度测试 在OpenGL ES中默认是不开启深度测试的,开启深度测试代码如下: GLES20.glEnable(GLES20.GL_DEPTH_TEST) 在每次绘制(onDrawFrame方法)时先清楚上次的深度缓存和颜色缓存...glDepthFunc方法使用方式如下: GLES20.glDepthFunc(GLES20.GL_LESS) 在 OpenGL ES for Android 绘制立方体 中是典型的深度测试用例,通过这篇文章可以查看开启深度测试和不开启的区别

90620

Elasticsearch:使用search after实现深度分页

Elasticsearch:使用from+size 实现分页 Elasticsearch:使用游标查询scroll 实现深度分页 本文将介绍Elasticsearch 中的另外一个搜索分页方法:search_after...◆ 一、Elasticsearch常见分页方式 Elasticsearch默认采用的分页方式是 from+ size 的形式,这种形式下,如果数据量不大或者from、size不大的情况下,效率还是蛮高的...但是在深度分页的情况下,这种使用方式效率是非常低的,并发一旦过大,还有可能直接拖垮整个Elasticsearch的集群。...为了避免深度分页带来的内存开销,Elasticsearch内部有一个默认设定,即最多只能查询前10000个文档。那么如果产品必须要做深度分页,那么应该采取什么方案呢?...search_after 分页的方式和 scroll 搜索有一些显著的区别,首先它是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上

7K10

得物面试:MySQL 深度分页如何优化?

深度分页介绍 查询偏移量过大的场景我们称为深度分页,这会导致查询性能较低,例如: # MySQL 在无法利用索引的情况下跳过1000000条记录后,再获取10条记录 SELECT * FROM t_order...ORDER BY id LIMIT 1000000, 10 深度分页优化建议 这里以 MySQL 数据库为例介绍一下如何优化深度分页。...范围查询 当可以保证 ID 的连续性时,根据 ID 范围进行分页是比较好的解决方案: # 查询指定 ID 范围的数据 SELECT * FROM t_order WHERE id > 100000 AND...阿里巴巴《Java 开发手册》中也有对应的描述: 利用延迟关联或者子查询优化超多分页场景。...参考 聊聊如何解决 MySQL 深分页问题 - 捡田螺的小男孩:https://juejin.cn/post/7012016858379321358 数据库深分页介绍及优化方案 - 京东零售技术:https

24810

如何在elasticsearch里面使用深度分页功能

前面的文章提到过es默认的from+size的分页方式返回的结果数据集不能超过1万点,超过之后返回的数据越多性能就越低。...这是因为es要计算相似度排名,需要排序整个整个结果集,假设我们有一个index它有5个shard,现在要读取1000到1010之间的这10条数据,es内部会在每个shard上读取1010条数据,然后返回给计算节点...那么问题来了,我就是想要深度分页数据应该怎么办?...es里面提供了两种方式来读取深度分页的数据: (1)离线的读取深度分页数据的Scroll方法 (2)能够用于实时和高并发场景的searchAfter方法(5.x之后) Scroll方式在前面的文章提到过...里面使用深度分页的功能,并对比了scroll和searchAfter的优缺点及不同之处,了解这些知识之后,我们就可以在适合的场景下正确的选择最优的处理方式。

2.6K80
领券