所有分类
  • 所有分类
  • 未分类

ES-查询数据的流程(原理)

简介

说明

本文介绍ES查询数据的流程。

问题引入

要搜索某个单词, 结果要排序( 按照匹配度进行排名) ,获得前10条数据,但数据在 5 个分片(Shard)上面, 如何得到最后正确的排序呢? 

查询流程概述

  1. 客户端将请求发送到一个协调节点(coordinate node)
  2. 协调节点将搜索请求发送到所有分片(同时查主节点和副本节点)。(5个分片,可能会这样分配:请求主节点1个分片,请求副本节点剩余的4个分片)。
  3. 所有分片基于本分片的内容独立完成搜索, 然后各自返回符合条件的10条结果(文档ID和排序值)。(一共返回50条结果)。
  4. 协调节点将返回的结果重新排序和排名,从50条中取前10条数据。
  5. 协调节点根据这10个数据的 doc id 去各个节点上拉取实际的 document 数据,最后返回给客户端。

也就是说,ES的一次搜索,是一次scatter/gather过程(这个跟mapreduce很类似)。 ​

1

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录