标准答案
- from + size 越深,节点需要保留和合并越多排序结果,内存、网络和响应时间都会上升。
- search_after 使用上一页最后一条的排序值继续查询,需要稳定且唯一的排序组合。
- 长时间遍历若要求一致快照,可使用 point-in-time 或等价的快照机制,并设置生命周期。
- 实时数据会新增、删除或更新,接口应明确允许轻微变化,或用快照和唯一 tie-breaker 减少漏读与重复。
题目解析
深度 from + size 要在协调节点保留和合并大量候选结果,成本随页码增长。search_after 使用上一页排序值继续读取,但必须有稳定排序和唯一 tie-breaker。
实时索引会新增、删除和更新文档,下一页可能出现重复或漏读。长时间导出若要求一致视图,需要 point-in-time 或其他快照机制,并控制快照生命周期和资源。
游标是查询条件的一部分,不应被客户端任意修改。游标过期、排序字段变化或索引切换时要返回明确错误或重新开始提示,不能静默从第一页造成重复导出。
常见误区
- 误区:用深分页支持无限滚动。改正:使用 search_after、限制最大页深度或改成按条件分段读取。
- 误区:排序字段重复却没有唯一次序。改正:加入唯一 ID 等 tie-breaker,并让下一页条件与排序一致。
- 误区:游标过期后静默从第一页重新读。改正:返回游标失效,让调用方明确重新开始或恢复快照。