> Mapping & Setting 是 Index 最重要的组成部分,Mapping 定义了 Index中的字段名称以及字段类型等信息, Setting 则定义了 Index 分片数量及副本数量等信息,通过了解 Mapping 和 Setting,可以更加合规的去设计 Index。
#### Node
一个节点就是一个Elasticsearch 实例,在操作系统层面看实质上就是一个进程,节点在启动时就拥有成为主节点的资格(Master Eligible),经过选举后每一个Master Eligible节点都可以成为 Master,整一个集群上的状态信息只有 Master 节点才可以修改。如上图有绿色五角星则代表是主节点。
#### 什么是Setting
Setting 是用于定义 Index 分片数量及副本数量等相关的配置信息,其中分片数量在设定后不能修改,而副本数量可以在运行过程中根据业务需要动态调整。
通过 REST API 进行 Index Setting 的创建
PUT materiel { "settings" : { "number_of_shards" : 3, "number_of_replicas": 1 } }
##### 分片 Shard
分片(Shard)是为了解决数据在单一节点存储的问题而做的水平扩展,将数据分片后存放在不同的节点上可以提高对于数据操作的吞吐量及可扩展性。此参数一旦在索引(Index)创建完成后,则不可以进行修改。
##### 副本 Replica
副本(Replica)为了解决数据可用性问题,通常在分片数据丢失后,如果有副本数据在的话可以保证数据的完整性。并且在高吞吐量场景时,增加副本数量可以提供服务的读取吞吐量。此参数可以在索引创建时指定,也可以在创建后进行调整。
#### Setting 常用的参数
```
# 设置分片数量
number_of_shards
# 设置副本数量
number_of_replicas
# 设置自动扩展副本数量
index.auto_expand_replicas
# 设置 Index Buffer 刷新间隔
refresh_interval
# 设置自定义分词器
analysis
```
#### 什么是Mapping
Mapping 是用于定义 Document 及其包含的字段类型和索引方式相关的信息,但在Elasticsearch中,可以动态的识别新增的字段值来推测出字段类型动态增加。
通过 REST API 进行 Index Mapping 的创建
PUT materiel { "mappings" : { "properties" : { "materiel" : { "type" : "text" }, "description" : { "type" : "text" } } } }
#### Mapping 常用的参数
```
# 设置新增字段是否更新至 Mapping 并索引数据
"dynamic": "true|false|strict"
# 设置字段名称及类型
"properties"
```
#### REST API 操作
PUT materiel { "settings" : { "number_of_shards" : 3, "number_of_replicas": 1 }, "mappings" : { "properties" : { "materiel" : { "type" : "text" }, "description" : { "type" : "text" } } } }
创建索引 materiel
设置分片数量为3,副本数量为1
定义字段 materiel 和 description,类型为字符串