什么是Elasticsearch?
Elasticsearch是一个分布式的开源搜索和分析引擎,构建在Apache Lucene库之上。Elasticsearch还提供向量搜索和检索增强生成(RAG),无缝支持现代人工智能应用。应用程序可以通过向Elasticsearch集群发送JSON有效负载来存储结构化和非结构化数据,无论是否定义了模式。
Elasticsearch架构
从基础开始,Elasticsearch集群的主要组件包括:
文档
文档是Elasticsearch存储的最小信息记录,表示为JSON。文档由多个字段(键值对)组成,具有预定义的模式或无模式,可以推断出索引的任何新字段的数据类型。
索引
索引是具有相同模式的文档的逻辑集合,由索引名称标识。
分片
Elasticsearch索引被分割为可管理的单元,称为分片,它们是文档的集合。分片是搜索的基本单位,并在多个节点上进行复制,以实现冗余和容错。
节点
一个节点是Elasticsearch的一个独立实例,管理属于一个或多个索引的一组分片。节点可以担任不同的角色,如数据节点、主节点和摄取节点。
集群
一个Elasticsearch集群是一组相互连接的节点。集群中的所有节点都可以处理来自客户端的请求,并相互通信。集群中的每个节点拥有属于一个索引的一部分分片。
查询架构
以下架构图概述了搜索请求的流程:
- 用户或应用程序发起搜索查询。查询可以由集群中的任何节点处理。处理请求的节点是“协调”节点。
- 协调节点将查询广播到所有相关分片及其副本。
- 每个分片在本地执行查询并将轻量级结果集返回给协调节点。
- 协调节点合并接收到的结果。这是“查询”阶段的结束。查询阶段识别了构成搜索结果的基本文档,但仍需要检索完整文档。
- 协调节点向拥有分片发送提取请求,以丰富结果集中的文档。
- 丰富的文档被返回给协调节点。
- 排序和丰富后的完整搜索结果集被返回给调用者。
索引架构
以下架构图概述了索引请求的流程:
- 用户发送要为Elasticsearch索引的JSON文档。如果文档已存在,则添加新字段,并覆盖现有字段。首先接收请求的节点是“协调”节点。
- 协调节点识别传入文档的主分片,通常基于文档ID,并将请求转发给拥有主分片的数据节点。
- 主分片验证操作并在本地执行。
- 主分片然后将操作并行转发到其所有副本。
- 副本分片在其节点上本地应用操作。
- 步骤6、7和8显示了将写操作的确认从副本分片传递到主分片、协调节点和调用者。
结论
本文描述了Elasticsearch集群的不同组件:文档、索引、分片和节点。它还概述了搜索请求和索引请求的生命周期。其灵活的架构使得在集群扩展时可以轻松添加和移除节点。结合无模式索引和对AI搜索功能的支持,这使得Elasticsearch成为需要实时高效存储、搜索和分析大容量数据的组织的事实标准。
Source:
https://dzone.com/articles/elasticsearch-query-and-indexing-architecture