ES 基本概念
| ES | MySql |
|---|---|
| 字段(Field) | 列(column) |
| 文档(document) | 一行数据(row) |
| 类型(type) | 表(table) |
| 索引(index) | 数据库(data base) |
其中类型的概念在新版的ES 中已经废弃。
ES 里存的数据其实就是指索引下的类型里面的Json 格式的数据。
接下来我们分别对这些概念进行详细的解释。
文档(document)
对比与Java 面向对象,ES 其实是面向文档的。
文档是ES 中所有可搜索数据的最小单元。
ES 中的文档就类似于MySql 中的一条记录,区别是ES 的文档会被序列化成Json 的格式,保存在ES 中。
这个Json 对象是由字段组成,而字段就相当于MySql 的列,每个字段都有自己的类型(String/bool/Date/日期)
每个文档都有一个id,类似MySql 的主键,可以自己指定,也可以ES 生成。
文档的格式支持数组/嵌套,在一个索引(数据库)或者类型(表)里面,可以存储任意多的文档。
类型(type)
这个其实从ES 6.0 版本以后就已经开始废弃了,但是作为有过的概念,我们还是拿出来讲一下。
类型相当于MySql 中的表。我们知道MySql 中一个库里面存在多个表,最原始的ES 也是这样做的。在一个索引下有很多类型。
从6.0 版本以后,类型的概念就已经开始废弃了,但是此时一个索引下仍旧可以设置多个类型;到了7.0 版本,一个索引就只能创建一个类型了。
索引(index)
索引相当于MySql 里的数据库,它是具有某种相似特性的文档的集合。也就是说,不同特性的文档一般都放在不同的索引里,但也不是绝对的。
索引的名称必须全部小写。
单个集群中,可以指定任意多个索引。
索引具有mapping 和setting 的概念,mapping 用来定义文档字段的类型,setting 用来定义不同数据的分布。
节点(node)
一个节点就是一个ES 实例,本质就是一个Java 进程。
节点名称可以通过配置文件配置,可以在启动的使用命令进行配置。默认是随机分配的。
ES 节点主要分为以下几种:
- master
- data
- coordinate 每个节点默认都起到了coordinate 的作用,一般在开发中一个节点可以承担多个角色,但是在生产环境中,设置节点单一角色,有利于提高性能。
分片
ES 中索引可能存储大量的数据,这些数据可能会超出单个节点的硬件限制。
为解决这个问题,ES 提供了将索引细分为多个碎片的功能,这就是分片。
这里可以简单地理解,创建索引的时候,只需要我们定义所需要的碎片的数量即可。其实每个分片都可以看作是一个完全功能性独立的索引,可以部署到集群中的任何节点上。
副本分片
为了故障转移,ElasticSearch允许将索引分片的一个或多个复制成所谓的副本分片。
以上,及安装,参考:www.1024sou.com/article/504…