Elasticsearch 查询和索引架构

什么是Elasticsearch?

Elasticsearch是一个分布式的开源搜索和分析引擎,构建在Apache Lucene库之上。Elasticsearch还提供向量搜索和检索增强生成(RAG),无缝支持现代人工智能应用。应用程序可以通过向Elasticsearch集群发送JSON有效负载来存储结构化和非结构化数据,无论是否定义了模式。

Elasticsearch架构

从基础开始,Elasticsearch集群的主要组件包括:

文档

文档是Elasticsearch存储的最小信息记录,表示为JSON。文档由多个字段(键值对)组成,具有预定义的模式或无模式,可以推断出索引的任何新字段的数据类型。

索引

索引是具有相同模式的文档的逻辑集合,由索引名称标识。

分片

Elasticsearch索引被分割为可管理的单元,称为分片,它们是文档的集合。分片是搜索的基本单位,并在多个节点上进行复制,以实现冗余和容错。

节点

一个节点是Elasticsearch的一个独立实例,管理属于一个或多个索引的一组分片。节点可以担任不同的角色,如数据节点、主节点和摄取节点。

集群

一个Elasticsearch集群是一组相互连接的节点。集群中的所有节点都可以处理来自客户端的请求,并相互通信。集群中的每个节点拥有属于一个索引的一部分分片。

查询架构

以下架构图概述了搜索请求的流程:

  1. 用户或应用程序发起搜索查询。查询可以由集群中的任何节点处理。处理请求的节点是“协调”节点。
  2. 协调节点将查询广播到所有相关分片及其副本。
  3. 每个分片在本地执行查询并将轻量级结果集返回给协调节点。
  4. 协调节点合并接收到的结果。这是“查询”阶段的结束。查询阶段识别了构成搜索结果的基本文档,但仍需要检索完整文档。
  5. 协调节点向拥有分片发送提取请求,以丰富结果集中的文档。
  6. 丰富的文档被返回给协调节点。
  7. 排序和丰富后的完整搜索结果集被返回给调用者。

索引架构

以下架构图概述了索引请求的流程:

  1. 用户发送要为Elasticsearch索引的JSON文档。如果文档已存在,则添加新字段,并覆盖现有字段。首先接收请求的节点是“协调”节点。
  2. 协调节点识别传入文档的主分片,通常基于文档ID,并将请求转发给拥有主分片的数据节点。
  3. 主分片验证操作并在本地执行。
  4. 主分片然后将操作并行转发到其所有副本。
  5. 副本分片在其节点上本地应用操作。
  6. 步骤6、7和8显示了将写操作的确认从副本分片传递到主分片、协调节点和调用者。

结论

本文描述了Elasticsearch集群的不同组件:文档、索引、分片和节点。它还概述了搜索请求和索引请求的生命周期。其灵活的架构使得在集群扩展时可以轻松添加和移除节点。结合无模式索引和对AI搜索功能的支持,这使得Elasticsearch成为需要实时高效存储、搜索和分析大容量数据的组织的事实标准。

Source:
https://dzone.com/articles/elasticsearch-query-and-indexing-architecture