Elasticsearch查询分两个阶段查询阶段和提取阶段
查询阶段
客户端向集群中的某个节点(假设节点1)发起查询请求,节点1会创建一个from+size大小的队列(from:偏移量,size:要取回的文档个数)。
节点1向集群中所有其他的分片(主或从)发起查询请求,每个分片也会创建一个from+size大小的队列,并将查询结果添加到队列中。
其他分片将查询到的文档ID和排序值发送给节点1,节点1将所有结果进行合并并排序,添加到队列中
提取阶段
节点1根据文档ID发出请求到相关分片,相关分片查询出结果,并将结果返回给节点1
节点1将结果返回给客户端
由上可以看出当from偏移量较大时(size分页一般是默认大小),会对单机造成较大压力,汇聚结果的节点要对 分片个数 * (from + size)个文档进行归并,应从业务上尽量避免这种大分页
参考自:https://www.elastic.co/guide/en/elasticsearch/guide/1.x/_search_options.html