ES 入门 基本概念理解

310 阅读3分钟

ES 基本概念

ESMySql
字段(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…