Elasticsearch Basic Concepts

基本概念

Cluster 集群

Cluster 包含了多个运行ES的节点,每个集群都有一个唯一的名字,用来区分不同的集群,含有相同cluster nameNode属于同一个集群

Node 节点

运行ES的一个实例

Index 索引

相当于MySql 的一个Database,他是Document的集合,每个索引都由他的名称来区分,而且他的名称全是小写的.这个名称可以代表索引,去进行查询更新删除等操作

Type 类型

可以理解为Database中的一张表,在一个索引内可以定义多个Type,每一个Type都相当于是对整个索引的一个逻辑分类,就像在一个Database中可以定义多个table,每个table都相当于Database中的一个逻辑分类一样.

Document 文档

相当于Table中的一行记录(元组),一个Document是ES中可以被索引的最基本的数据单元,就像Database里每条记录也是一个最基本的单元.每个Document可以包含一个或多个Field.

Field 字段

与MySQL中的字段类似,但是ES中的字段是带有值的

Shards & Replicas 分片&副本:

当一个Node上的索引大到该Node的磁盘无法存储这个索引或者索引太大导致搜索效率低下的时候,就可以将这个庞大的索引分成多个分片(Shards),存储在多个Node上,这样就解决了无法存储和搜索低效的问题,因此分片存在有两个中要的原因:

  • 可以对庞大的索引进行水平切分,这个操作类似于对大表的水平切分
  • 因为切分成了多个分片,因此就可以并行去进行查询,这样就可以提高查询效率.
    对于Shards怎样去分发到多个Node,以及搜索完成后讲数据汇总到发起请求的节点,这些工作都是由ES来自动完成的,不需要我们去关心.

因为服务器存在一定的宕机风险,因此如果所有的Shard都放在某个Node上,如果宕机了,索引就会丢失,因此为了解决这个问题需要对Shards进行备份生产Replica Shards 也叫做Replicas, Replica的主要作用有两个:

  • 解决Node宕机后,索引丢失的问题
  • 提高搜索效率,因为Replicas不会放下一个Node下,所以处理搜索请求的时候多个节点可以并行对Replicas进行查询,提高吞吐量.
    总得来说,每个Index可以被切分成多个分片,每个分片可以有0个或多个副本,在创建索引的时候可以指定分片数和副本数,在成功创建索引后,依然可以通过ES提供的_catAPI来修改副本数,但是不能去修改分片数.

一个ES的Shard就是一个Lucene的索引,每个Lucene索引可以存储Integer.MAX_VALUE-128 = 2,147,483,519个Document. 默认情况下一个ES索引有5个分片,每个分片有1个副本,也就是说当你创建一个索引时会产生5个分片,每个分片会有1个副本,总共就相当于1个索引有10个分片.

参考

Elasticsearch Basic Concepts