核心概念
# 索引 index
一个索引就是一个拥有几分相似特征的文档的集合
- 如:有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引
一个索引由一个名字来标识
- 必须全部是小写字母
- 通过索引名,对这个索引中的文档进行索引、搜索、更新和删除的时候
在一个集群中,可以定义任意多的索引
能搜索的数据必须索引,这样的好处是可以提高查询速度
- 如:新华字典前面的目录就是索引的意思,目录可以提高查询速度
Elasticsearch 索引的精髓
- 一切设计都是为了提高搜索的性能
# 类型 type
在一个索引中,可以定义一种或多种类型
- 一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定
- 通常会为具有一组共同字段的文档定义一个类型
不同的版本,类型发生了不同的变化
版本 | Type |
---|---|
5.x | 支持多种 type |
6.x | 只能有一种 type |
7.x | 默认不再支持自定义索引类型(默认类型为:_doc) |
# 文档 document
一个文档是一个可被索引的基础信息单元,也就是一条数据
- 如:某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档
- 文档以 JSON格式来表示
一个 index/type 里面,可以存储任意多的文档
# 字段 field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
# 映射 mapping
mapping 是处理数据的方式和规则方面做一些限制
- 如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的
- 处理 ES 里面数据的一些使用规则设置
- 按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好
# 分片 Shards
一个索引可以存储超出单个节点硬件限制的大量数据,如:
- 一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间
- 单个节点处理搜索请求,响应太慢
为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当创建一个索引的时候,可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的索引
,这个索引
可以被放置到集群中的任何节点上
分片的作用
- 允许水平分割 / 扩展你的内容容量
- 允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
Elasticsearch 管理分片的分布,它的文档的聚合和搜索请求
注意
- 一个
Lucene索引
在 Elasticsearch 称作分片 - 一个
Elasticsearch索引
是分片的集合 - 当 Elasticsearch在索引中搜索时,发送查询到每一个属于索引的分片--
Lucene索引
# 副本 replicas
在网络中,失败随时都可能发生,在某个分片/节点由于某些原因处于离线状态,此时故障转移机制是非常有用的
Elasticsearch 允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。
副本的作用
- 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的
- 扩展搜索量/吞吐量,搜索可以在所有的副本上并行运行
分片在创建索引的时候确定,并且创建完成后不能修改,而副本可以在索引创建之后修改
- 每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次
- 一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别
- 分片和复制的数量可在索引创建的时候指定
- 在索引创建之后,可以在任何时候动态地改变副本的数量,但是事后不能改变分片的数量
默认Elasticsearch 中的每个索引被分片 1 个主分片和 1 个副本
- 如果集群至少有两个节点,索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),每个索引总共有 2 个分片
# 分配 allocation
master节点将分片分配给某个节点的过程
- 分配主分片过程
- 分配副本分片过程,包含了从主分片复制数据的过程
Last Updated: 2022/02/05, 15:58:51