1. 分布式搜索的基本概念
因为当一个CRUD操作发生时,我们会根据一个请求的元数据,_index,_type,_id来判断一个文档属于哪个分片。知道了哪个分片,但是还得搜索这个分片,来查找这个文档。
以上这个任务是找到了文档,接下来还有一个任务,将得到的结果放到一个有序列表中,然后返回给客户端。
以上就是在分布式搜索的两个基本过程:
查询和取回
2. 查询
1. 当一个查询请求请求到请求结点时,请求结点会跟查询请求中的from和size,来建立一个长度为from+size的空优先队列。
2. 根据请求中的信息,将请求转发(广播)到所有相关的分片中,分片也会根据请求中的from和size,创建一个长度为from+size的空优先队列,然后在分片中执行查询请求,将请求结果填充到这个有序优先队列中。排序的依据为_score的值。
3. 每个分片返回一个轻量级有序优先队列,只包含document_id和相应的_score值,请求结点将这些数据进行合并排序到自己的优先队列中,这就代表了最终的结果集。
4. 至此,查询结束。
3. 取回
查询阶段已经已经辨别出哪些document是需要返回给客户端的,在取回阶段就要根据_id,向各个分片取回这些document的_source
- 请求结点根据_id,向相应的分片发送GET请求
- 分片接收到GET请求后,会enrich这些document,然后返回给请求结点
- 请求结点搜集完毕后,会将所有数据放到同一个响应中返回给客户端