Elasticsearch学习笔记(二):ES搜索原理

107 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

导语

Elasticsearch 是一个分布式的开源搜索和分析引擎,目前被广泛使用,本文以一次查询请求为例,解释Elasticsearch的搜索过程。

ES中的查询

这里还是以上一篇博客中使用的这个集群来介绍问题,在图中的ES集群中,共有4个节点,16个shard。其中有着8个primary shard和8个replica shard。一个 分片 shard 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。

image.png

这时,客户端程序Client需要进行一次查询。

image.png

首先,客户端程序发送请求到任意一个node,我们把这个node称为coordinate node,即协调节点。

这个协调节点主要用于和客户端程序进行交互,并完成以下功能:

  • 路由索引请求
  • 聚合搜索结果集
  • 分发批量索引请求

image.png

接下来,coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在paimary shard以及所有replica中随机选择一个,尽量保证读请求负载均衡

image.png

然后,接收到请求的node将进行数据查询,查询完成后返回查询结果的document给coordinate node。

image.png

最后,再由coordinate node返回查询结果document给客户端。

增删改操作

相比于ES的查询操作,增删改需要写入数据,因而过程更加复杂。

首先,增删改操作需要将写入的内容发送到对应数据shard的node上,在进行操作时,ES会先完成primary shard的更新。

接着,只有在确保primary shard数据更新后,这些更新的数据才会被同步到对应的replica shard上。数据写入的过程中,为了保证数据不丢失,最好保证至少一个副本分片写入成功以后才返回客户端成功。 这样,一次完整的增删改操作才算是完成。

总结来说,查询请求既可以由primary shard处理也可以由replica shard处理。而增删改的请求只能由primary shard处理。

参考

1 从原理到应用,Elasticsearch详解