背景
学习elasticsearch查询流程,了解es源码。在网络上看了很多elasticsearch的教程。对es的流程介绍都是停留在query then fetch层面。没有一篇真正细致的深入到流程的每一步。本篇博客旨在细致的介绍es search过程的整个调试流程,介绍的是query then fetch的流程。所以,默认对es有一定理解,且能搭建一个本地的调试环境。
请带着以下问题去读本篇文章。
- elasticsearch client是如果发送请求的,又是如何接受和处理返回的结果?
- 协调节点的接收到client请求后的处理流程是怎样的?
- 协调节点怎么收集合并数据,分数处理?
- 数据节点接收到查询请求的处理过程?
- 数据节点接受到fetch请求的处理过程?
- search过程中涉及到的请求有哪些?
这些问题会在文章最后解答。
查询过程
首先从整体架构上介绍整个查询流程。
我们知道,es的查询分为query then fetch和dfs query then fetch两种,而本文介绍的是前者。es的底层结构是倒排索引,这个查询的过程,query就是先根据查询获取具体的数据的id。fetch就是根据query过程的获取的id拿出具体的数据。整个流程涉及到了三个实体,客户端(client),协调节点(Coordinator),数据节点(DataNode)。三者的具体关系看下图,这个流程在网上也有很多的文章介绍。