了解 Elasticsearch 的核心概念对掌握其使用和优化非常重要。以下是对 Elasticsearch 中索引、类型、文档、节点、集群、分片和副本的详细解释。

索引(Index)

  • 定义: 索引是 Elasticsearch 中存储、管理和查询文档的地方。可以把索引看作是一个数据库中的表。
  • 结构: 每个索引包含多个类型(在 Elasticsearch 6.x 及以前版本)和文档。
  • 创建: 索引在创建时定义映射(Mapping)和设置(Settings)。映射定义了字段类型和字段属性,而设置包括分片和副本的数量等配置。
  • 命名: 索引名称必须是小写,不能包含空格和一些特殊字符。

类型(Type)

  • 定义: 类型是 Elasticsearch 6.x 及以前版本中的概念,用于将索引内的文档分类。类型相当于数据库表中的列族。
  • 结构: 每个类型包含多个文档。不同类型可以有不同的字段。
  • 废弃: 从 Elasticsearch 7.x 开始,类型概念被废弃,一个索引中只能包含一个类型,以简化数据模型和避免冲突。

文档(Document)

  • 定义: 文档是 Elasticsearch 中存储的数据单元,相当于数据库表中的一行。每个文档是一个 JSON 对象。
  • 结构: 文档包含多个字段,每个字段都有数据类型,如字符串、数字、日期等。
  • 唯一标识: 每个文档有一个唯一的 _id 字段,作为其唯一标识符。

节点(Node)

  • 定义: 节点是运行 Elasticsearch 实例的基本单元。每个节点是集群的一部分。
  • 类型: 节点可以有多种角色,如主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinator Node)等。
  • 配置: 节点的角色和配置通过 elasticsearch.yml 文件进行设置。

集群(Cluster)

  • 定义: 集群是由多个节点组成的集合,协同工作来存储数据和处理搜索请求。
  • 名称: 集群有一个唯一的名称,用于标识该集群,默认名称为 “elasticsearch”。
  • 管理: 集群通过选举一个主节点来管理集群状态和任务分配。主节点负责创建和删除索引,跟踪集群范围内的节点信息等。

分片(Shard)

  • 定义: 分片是 Elasticsearch 中索引的基本存储单元,一个索引可以被拆分成多个分片。
  • 类型: 分片有两种类型:主分片(Primary Shard)和副本分片(Replica Shard)。
  • 配置: 分片数量在索引创建时指定,主分片数量创建后不可更改。
  • 分配: Elasticsearch 会自动将分片分配到集群中的不同节点上,以均衡负载和提高可用性。

副本(Replica)

  • 定义: 副本是主分片的复制,用于提高数据的可用性和容错能力。
  • 数量: 每个主分片可以有多个副本分片,副本数量可以在索引创建后动态调整。
  • 角色: 副本不仅在主分片失效时接管工作,还可以分担查询负载,提升查询性能。

关系和架构图

graph LR subgraph Elasticsearch_Cluster A[Node 1] B[Node 2] C[Node 3] end subgraph Index D[Primary Shard 1] E[Primary Shard 2] F[Replica Shard 1] G[Replica Shard 2] end D --> A E --> B F --> C G --> A

总结

  • 索引(Index): 存储、管理和查询文档的地方,相当于数据库中的表。
  • 类型(Type): Elasticsearch 6.x 及以前版本中的分类概念,从 7.x 开始废弃。
  • 文档(Document): 存储的数据单元,是一个 JSON 对象,相当于数据库表中的一行。
  • 节点(Node): 运行 Elasticsearch 实例的基本单元,可以有多种角色。
  • 集群(Cluster): 由多个节点组成的集合,协同工作来存储数据和处理请求。
  • 分片(Shard): 索引的基本存储单元,分为主分片和副本分片。
  • 副本(Replica): 主分片的复制,用于提高数据的可用性和查询性能。