ES 查询过程
ES查询
Coordinating 节点
每个节点都是协调节点。当客户端向一个节点发送查询请求时,这个节点就充当协调节点,协调节点需要处理本次请求:
解析请求参数,计算当前索引的分片;
广播查询请求到索引的各个分片,并行查询各分片数据;
合并所有分片的查询结果,返回到客户端。
两步查询
查询分两个阶段:
查询阶段协调节点将查询请求发送到当前索引的所有分片后:
各个分片根据 term 查询倒排索引取到 docId;
每个分片生成一个优先队列(根据 from size 确定),只包含 doc_id 和排序值;
所有分片将队列返回到协调节点。
取回阶段协调节点根据查询阶段查到的队列,汇总所有队列,截取 size 内容,向队列中 doc 所在的分片发起 Fetch 请求,取到 doc 的正排信息组装结果,最终返回给客户端。
深翻页请求深翻页请求为什么那么慢?在深翻页请求时:每一个分片都需要生成一个 from size 大小的队列,深翻页的 from 值一般都非常大,每个分片都需要计算资源来处理前 from 条数据,但是最终只取 size 大小的数据。CPU 和 memory 消耗都是随 ...
