`search_after` 确实不支持随机访问(即直接跳到任意一页),因此在前端需要随机跳转到某一页的场景中,使用 `search_after` 是不合适的。这种情况下,更适合使用 `from` 和 `size` 来实现分页。
为什么 `search_after` 不支持随机访问
`search_after` 的工作原理是基于排序字段的值,从上一页的最后一个结果之后继续查找下一页的结果。它依赖于结果的顺序性,因此只能顺序分页。如果需要跳转到任意一页,`search_after` 无法直接实现,因为它无法像 `from` 和 `size` 那样通过偏移量直接定位到目标页。
前端分页场景的适用性
1. 随机访问分页(适合 `from` 和 `size`)
如果前端允许用户直接跳转到任意一页(例如用户可以直接输入页码,或者点击“第 100 页”这样的按钮),那么应该使用 `from` 和 `size`。这种方式可以方便地通过偏移量(`from`)直接定位到目标页。
- 优点:
- 支持随机访问,用户可以自由跳转到任意一页。
- 实现简单,前端和后端的逻辑都比较直观。
- 缺点:
- 当分页深度较大时(例如 `from` 值很大),性能会显著下降,因为 Elasticsearch 需要加载和丢弃大量中间结果。
2. 顺序分页(适合 `search_after`)
如果前端的分页逻辑是顺序的(例如用户只能通过“下一页”或“上一页”按钮逐步浏览),那么可以使用 `search_after`。这种方式在深度分页时性能更好,因为它不需要加载和丢弃大量中间结果。
- 优点:
- 性能高效,适合深度分页。
- 资源占用低,对集群的压力小。
- 缺点:

最低0.47元/天 解锁文章
1882

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



