Elasticsearch query phase与fetch phase

Elasticsearch query phase工作流程

Elasticsearch 搜索请求发送到某一个 coordinate node,构构建一个 priority queue,长度以 paging 操作 from 和 size 为准,默认为 10。

coordinate node 将请求转发到所有 shard,每个 shard 本地搜索,并构建一个本地的 priority queue,各个 shard 将自己的 priority queue 返回给 coordinate node,并构建一个全局的 priority queue。

Elasticsearch replica shard

一次请求要打到所有 shard 的一个 replica/primary 上去,如果每个 shard 都有多个 replica,那么同时并发过来的搜索请求可以同时打到其他的 replica 上去。

Elasticsearch fetch phase工作流程

coordinate node 构建完 priority queue 之后,就发送 mget 请求去所有 shard 上获取对应的 document,各个 shard 将 document 返回给 coordinate node。

coordinate node 将合并后的 document 结果返回给 client 客户端,一般搜索,如果不加 from 和 size,就默认搜索前 10 条,按照 _score 排序。