简述ES的写流程,GET读取数据流程和Search搜索数据流程。
ES的读写流程主要是协调节点,主分片节点、副分片节点间的相互协调。
ES的读取分为GET和Search两种操作。GET根据文档id从正排索引中获取内容;Search不指定id,根据关键字从倒排索引中获取内容。
客户端向集群中的某个节点发送读取请求,该节点就作为本次请求的协调节点;
协调节点使用文档ID来确定文档属于某个分片,再通过集群状态中的内容路由表信息获知该分片的副本信息,此时它可以把请求转发到有副分片的任意节点读取数据。
协调节点会将客户端请求轮询发送到集群的所有副本来实现负载均衡。
收到读请求的节点将文档返回给协调节点,协调节点将文档返回给客户端
ES的Search操作分为两个阶段:query then fetch。需要两阶段完成搜索的原因是:在查询时不知道文档位于哪个分片,因此索引的所有分片都要参与搜索,然后协调节点将结果合并,在根据文档ID获取文档内容。
query节点知道了要获取哪些信息,但是没有具体的数据,fetch阶段要去拉取具体的数据。相当于执行多次上面的GET流程
参考自《ES源码解析与优化实践》
原文:https://www.cnblogs.com/upupfeng/p/13488120.html