简介
说明
本文介绍ES查询数据的流程。
问题引入
要搜索某个单词, 结果要排序( 按照匹配度进行排名) ,获得前10条数据,但数据在 5 个分片(Shard)上面, 如何得到最后正确的排序呢?
查询流程概述
- 客户端将请求发送到一个协调节点(coordinate node)
- 协调节点将搜索请求发送到所有分片(同时查主节点和副本节点)。(5个分片,可能会这样分配:请求主节点1个分片,请求副本节点剩余的4个分片)。
- 所有分片基于本分片的内容独立完成搜索, 然后各自返回符合条件的10条结果(文档ID和排序值)。(一共返回50条结果)。
- 协调节点将返回的结果重新排序和排名,从50条中取前10条数据。
- 协调节点根据这10个数据的 doc id 去各个节点上拉取实际的 document 数据,最后返回给客户端。
也就是说,ES的一次搜索,是一次scatter/gather过程(这个跟mapreduce很类似)。
请先
!