Elasticsearch数据检索流程

系列文字 Elasticsearch集群架构&&如何保证分片数据一致性
本文主要分享ES的数据查询流程
Elasticsearch的数据检索流程涉及多个步骤,从客户端请求到最终返回结果,底层实现依赖于其分布式搜索引擎的架构。以下是Elasticsearch数据检索的基本流程及其底层实现:

数据检索流程

分为根据ID检索和字段检索。

根据ID检索流程
根据 doc id 检索流程.png
  1. 客户端发送put请求到任意节点,该节点将作为协调节点。
  2. 使用 doc id 确定数据所在主分片「id 到分片的映射是基于 doc id 的哈希值和集群分片数量计算的」路由到 shard 所在节点。
  3. 将数据返回协调节点。
  4. 协调节点处理结果返回客户端。如果启动了缓存,在协调节点命中缓存,会将缓存结果直接返回客户端。
根据字段检索
根据query 字段检索流程.png
  1. 客户端发送put请求到任意节点,
    该节点将作为协调节点。
  2. 协调节点进行 query 解析,根据索引及解析后的数据,确定相关分分片,并将查询分发到相关分片。
  3. 相关分片的数据节点执行本地查询,把符合条件的数据id、排序字段等信息返回给协调节点。
  4. 各分片数据将 TopN 数据返回协调节点。
    协调节点将数据合并排序整理后得到最终TopN的id。
  5. 各分片根据 id 获取数据,将数据返回协调节点。
  6. 协调节点将检索结果返回客户端。

检索底层实现

倒排索引

Elasticsearch使用倒排索引来实现快速搜索。每个字段都被分析并存储为一个倒排索引,其中包含词条(Term),词条对应的文档列表,以及词条在文档中的位置。

分片和副本

索引被分成多个主分片,每个主分片可以有多个副分片。查询操作会在所有相关的主分片及其副本上执行。

并行处理

查询在多个分片上并行执行,以提高性能。

分布式缓存

Elasticsearch使用两种类型的缓存:查询缓存和文档缓存。查询缓存存储了常见查询的结果,而文档缓存存储了最近访问的文档。

分布式执行

查询操作在所有相关的分片上分布式执行,每个分片生成一个局部排序的结果集。

聚合操作

对于聚合查询,Elasticsearch会在每个分片上执行局部聚合,然后将这些局部聚合结果发送回协调节点进行全局聚合。

故障转移和容错

如果某个分片的节点不可用,Elasticsearch会使用副本分片来处理查询。

优化和简化

Elasticsearch的查询优化器会尝试简化查询,并选择最有效的执行计划。

结果的序列化和传输

最终结果在协调节点上进行序列化,并通过HTTP或其他协议发送回客户端。

Elasticsearch的查询流程和底层实现非常复杂,涉及到大量的优化和并行处理机制,以确保在大规模数据集上也能提供快速和准确的搜索结果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容