基本概念
集群(cluster)
Elasticsearch集群(cluster)是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。集群靠其独有的名称进行标识,即用户在百度智能云创建的集群名称。节点靠其集群名称来决定加入哪个Elasticsearch集群,一个节点只能属一个集群。如果不考虑冗余能力等特性,仅有一个节点的Elasticsearch集群一样可以实现所有的存储及搜索功能。
节点(node)
运行了单个实例的Elasticsearch主机称为节点(node),它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。类似于集群,节点靠其名称进行标识。一个节点可以被添加到指定名称的集群中。默认情况下,每个节点会被设置加入到名称为用户设置的集群名称的集群中,这意味着,如果在同一网络中启动了某些节点(假设这些节点可以发现彼此),它们会自动形成并集群中。
索引(index)
Elasticsearch将数据存储于一个或多个索引(index)中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。 索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个Elasticsearch集群中可以按需创建任意数目的索引。
类型(type)
类型(type)是索引内部的逻辑分区。在Elasticsearch 6.x中,Elasticsearch禁止了一个索引中使用多个type;在Elasticsearch 7.x中,Elasticsearch使⽤_doc
作为默认的type,并在API中逐步取消type的使用;在将来的Elasticsearch 8中,会彻底移除type概念,详情请参见Elasticsearch官方文档。
文档(document)
文档(document)是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。 文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为多值域。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。相当于关系型数据库中的一行数据。
字段(field)
组成文档的最小单位。相当于关系型数据库中的一列数据。
映射(mapping)
Elasticsearch中,所有的文档在存储之前都要首先进行分析。映射(mapping)被用来定义一个文档以及其所包含的字段如何被存储和索引,例如定义字段的名称和类型,以及选择所使用的分词器等。相当于关系型数据库中的Schema。
分片(shards)
Elasticsearch的分片(shard)机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片。每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。
一个分片可以是主分片(primary shard)或副本分片(replica shard)。Elasticsearch 7.0以下版本默认为一个索引创建5个主分片,并分别为每个主分片创建1个副本分片,7.0及以上版本默认创建1个主分片和1个副本分片。主分片的数量只能在索引创建前指定,并且索引创建后不能动态更改,只能通过reindex或split等方式修改。副本分片的数据可以根据需要动态修改。