es查询数据的工作原理是什么?

2021-12-24 08:55:48 浏览数 (1)

es读写底层原理剖析

一 . 根据id从es读数据过程

查询,GET某一条数据,写入了某个document,这个document会自动给你分配一个全局唯一的id,doc id,同时也是根据doc id进行hash路由到对应的primary shard上面去。也可以手动指定doc id,比如用订单id,用户id。

我们可以通过doc id来查询,会根据doc id进行hash,判断出来当时把doc id分配到了哪个shard上面去,从那个shard去查询

1)客户端发送请求到任意一个node,成为coordinate node 2)coordinate node进行hash后对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica node中随机选择一个,让读请求负载均衡 3)接收请求的node返回document给coordinate node 4)coordinate node返回document给客户端

二. es搜索数据过程

es最强大的是做全文检索,就是比如你有三条数据

java真好玩儿啊 java好难学啊 j2ee特别牛

你根据java关键词来搜索,将包含java的document给搜索出来

es就会给你返回:java真好玩儿啊,java好难学啊

1)客户端发送请求到一个coordinate node 2)协调节点将搜索请求转发到所有的shard对应的primary shard或replica shard 3)query phase:每个shard将自己的搜索结果(其实就是一些doc id),返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果 4)fetch phase:接着由协调节点,根据doc id去各个节点上拉取实际的document数据,最终返回给客户端

尤其要注意的这里是先拿的id哟

0 人点赞