1 基本概念
1.1 索引
- 索引是Elasticsearch存放数据的地方,可以看作是关系数据库中的一张表,相比于关系数据库,Elasticsearch可以快速、高效地对索引中的数据进行全文检索,并且不需要存储元原始数据。
- 索引是Elasticsearch中存储数据的一种逻辑结构。可以把它想象成数据库中包含行和列的表。行是索引中的一个文档,列示索引中的单个字段。Elasticsearch集群可以同时运行多个索引。除此之外,因为单个索引是由分片组成的,所以它可以分散到多个节点中。不仅如此,每个分片可以有一个完全相同的副本,用于调控搜索性能以及发生故障时的备份恢复。
- 所有组成索引的分片实际上是被分解成多个类型的apache lucene索引。
1.2 文档
- 文档是Elasticsearch中存储的主要实体。类比于关系数据库,Elasticsearch的每个文档相当于数据表中的一行数据。
- 文档由字段(行数据的列)组成,Elasticsearch允许一个字段出现多次,该类字段被称为多值字段。每个字段对应一种类型。字段类型可以是负复合的,字段可以包含其它子文档和数组。
1.3 文档类型
- 在Elasticsearch中,一个索引可以存储许多不同类型的对象。例如,基于Elasticsearch的博客可存储文章和评论。文档类型可以帮助我们轻松区分这些对象。
1.4 节点和集群
- Elasticsearch可以作为一个独立的搜索服务区工作。然而,为了能够处理大型数据集并实现容错功能,Elasticsearch支持在多台协同工作的服务器上运行。这些服务器被统称为一个集群,集群的每个服务器则被称为一个节点(node)。可以通过索引分片(分割成更小的个体)将海量数据进行分割并分布到不同节点。通过副本(索引部分的拷贝)可以实现更强的可用性和更高的性能。
1.5 分片
- 当需要存储大规模文档时,由于RAM空间、硬盘容量等的限制,仅使用一个节点时不够的。另一个问题是一个节点的计算能力达不到所期望的复杂功能的要求。在这种情况下,可以将数据切分,每部分是一个单独的apache lucene索引,称为分片。每个分片可以被存储在集群的不同节点上。当需要查询一个由多个分片构成的索引时,Elasticsearch将该查询发送到每个相关的分片,并将结果合并。这些过程对具体应用而言是透明的,无须知道分片的存在。
1.6 副本
- 为了提高查询的吞吐量或实现高可用性,可以启用分片副本功能。副本分片是对原始分片的一个精确拷贝,原始分片被称为主分片。对索引的所有修改操作都直接作用在主分片上,每个主分片可以有零个或多个副本分片。当主分片丢失时,集群可以将一个副本分片提升为新的主分片。