文档 | Document
- 文档相当于 MySQL 中的一条记录,是可搜索数据的最小单位,举个栗子,一条电影信息:
movieId,title,genres 1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy
- 文档被序列化成 JSON 格式,保存在 ElasticSearch 中;
- 每个文档都有一个 UniqueID
- 可以自己指定;
- 可以通过 ElasticSearch 自动生成;
文档的元数据
用于标注文档的相关信息。
- _index:文档所属的索引名;
- _type:文档所述的类型名;
- _id:文档的唯一 id;
- _source:文档的原始 JSON 数据;
- _all:7.0 开始废除;
- _version:文档的版本信息;
- _score:文档在查询中的算分;
索引 | Index
- 索引是文档的容器,是一类文档的集合;
- 索引是逻辑空间上的概念,Shard 是物理空间上的概念,索引中的文档分散在 Shard 上;
索引的 Mapping
- 定义文档字段名和字段类型;
索引的 Setting
- 定义不同的数据分布;
索引的词性
索引(动词)文档到 ElasticSearch 的索引(名词)中;
名词: B 树索引、倒排索引;
索引的 Type
- 7.0 开始,索引的 Type 只能是 _doc;
集群 | Cluster
- 不同的集群通过不同的名字来区分,默认名字:elasticsearch;
- 一个集群可以有一个或多个节点
集群状态 | Cluster State
维护了一个集群中必要的信息:
- 所有节点的信息;
- 所有索引及其 Mapping 和 Setting 的信息;
- 分片的路由信息;
集群的健康状况
- Green:主分片与副本分片都正常分配;
- Yellow:主分片全部正常分配,有副本分片未正常分配;
- Red:有主分片未能分配;
节点 | Node
- 一个节点就是一个 ElasticSearch 的进程,一个 Java 进程;
- 一台机器上可以运行多个 ElasticSearch 进程,但是生产环境建议只运行一个;
- 每个节点都有名字,通过配置文件配置,或者启动的时候通过参数 -E node.name=node1 指定;
- 每个节点在启动之后,会分配一个 UID,保存在 data 目录下;
Master-eligible Node
- Master-eligible Node 可以参加选主流程,成为 Master Node,每个 Node 启动后,默认就是 Master-eligible Node;
- 当一个 Node 启动的时候,会将自己选举成 Master Node;
- 每个 Node 都保存了集群的状态,只有 Master 节点才能修改集群的状态信息;
Master Node
- 只有 Master 节点才能修改集群的状态信息;
Data Node
- 可以保存数据节点,负责保存分片数据,在数据扩展上起到了至关重要的作用;
Coordinating Node
- 负责接收 Client 的请求,将请求分发到合适的节点,最终把结果汇集到一起;
- 每个节点默认都起到了 Coordinating Node 的职责;
Hot & Warm Node
- 配置好的硬件作为 Hot Node,配置低的硬件做 Warm Node,降低集群部署成本;
Machine Learning Node
- 负责跑机器学习的 Job,用来做异常检测;
分片| Shard
一个分片是一个运行的 Lucene 实例。
主分片 | Primary Shard
- 用以解决数据水平扩展的问题,通过主分片,可以将数据分布在集群内的所有节点之上;
- 主分片数在索引创建的时候指定,后续不允许修改,除非 Reindex;
副本分片 | Replica Shard
- 副本分片是主分片的拷贝,用于解决数据高可用的问题;
- 副本分片数可以动态调整;
- 增加副本数,可以在一定程度上提高服务的可用性(读取的吞吐量);