Elasticsearch 在处理分页时,主要面临的挑战是分布式存储和结果排序带来的性能损耗。 针对不同的场景(浅分页、深度分页、全量导出),Elasticsearch 提供了三种主要的解决方案: 1. + (适用于浅分页) 2. Scroll API(适用于全量导出/离线处理,不再推荐用于实时搜索) 3. Search After(适用于深度分页,实时滚动,官方推荐) 4. Point In Time (PIT) + Search After(解决深度分页的一致性问题) --- 1. 为什么深度分页是性能杀手? 在了解解决方案之前,必须理解为什么简单的 + 在深度分页时会崩溃。 假设你有 5 个分片(Shards),想要获取第 10,000 页的数据(每页 10 条),即 。 Elasticsearch 的处理流程如下: 1. 协调节点(Coordinating Node) 接收请求。 2. 协调节点向 所有 5 个分片 发送请求。 3. 每个分片 必须查询并排序前 条数据(因为它不知道全局的前 10 条在哪里)。 4. 每个分片将这 100,000 条数据(通常只包含 ID ...