今年接触到了 Elasticsearch,还是挺有趣的,在这里以文字的形式梳理一下。废话不多说,今天正式开启我们的 Elasticsearch 之旅吧。
哦,对了,这一系列文章是基于 Elastcsearch7.9.3 版本的。官网地址:https://www.elastic.co/cn/elasticsearch
Elasticsearch,简称 ES,它是一个基于 Lucene 实现的分布式全文检索引擎,可以扩展至上百台服务器集群,处理 PB 量级的数据,使用 ES 可以近乎实时的完成大量数据的存储与检索。使用上也很方便,通过一些简单的 RESTful API 就可以操作 ES,当然也可以和 Java 整合在一起去使用,这些后边都会介绍到。更多花里胡哨的介绍可以自行百度。
上边我们对 ES 有了一个大致上的认识,接下来我们来了解 ES 中的一些基本的概念,加深对 ES 的认识。
初学者直接看一大堆名词容易懵圈,我们可以类比MySql中的一些概念,这样就更容易理解了,先看下边的表格:
MySql | Elasticsearch |
---|---|
Database(数据库) | Index(索引) |
Table(表) | Type(类型) |
Row(行) | Document(文档) |
Column(列) | Field(字段) |
表结构 | Mapping(映射) |
先理解一会儿表格的内容再继续。
1、Index(索引)
这个比较好理解,比如我们要存储用户信息,就可以创建一个名为user
的索引。可以理解为文档的集合。
2、Type(类型)
类型是在索引的基础上建立的,在 ES6.x 中,一个索引中可以创建多个类型;但从 ES7.x 开始,一个索引中只能创建一个类型,如果我们不指定类型名称,ES 会使用默认的类型名称_doc
。其实类型的概念在逐渐的被弱化,理解就行。我们一般可以不指定,使用默认的即可。
3、Document(文档)
文档就是我们存储在 ES 指定索引中的一条 JSON 格式的数据。我们在 ES 中大部分的操作都是基于文档的,这个是重点。
4、Field(字段)
前边说了,文档可以理解成一条 JSON 格式的数据,这里的字段可以简单的理解成 JSON 中的各个字段,但还是有区别的。
5、Mapping(映射)
映射就是用来定义文档中每个字段的属性,例如类型、分词等其它规则约束。关于字段的类型和分词后边会单独介绍。
6、Node(节点)
服务上运行的一个 ES 实例就是一个节点, 一台服务器上可以有多个 ES 节点。
7、Cluster(集群)
将多个运行 ES 的服务器节点组织在一起就是 ES 集群了,如果只有一个节点也算是集群。每个集群都有一个名称(cluster name
),作为其唯一标识。同一网段下的节点会根据配置的集群名称决定加入那个集群。
8、Shard(分片)
在 ES7.x版本中,ES默认会为一个索引创建1个主分片和每个主分片对应的1个副本分片,共2个分片;在之前的版本则是默认创建5个主分片和每个主分片对应的1个副本分片,共10个分片。
索引中的数据会被分配到各个主分片上,通常我们都是会搭建 ES 集群,进而这些分片会被分配到不同的节点上,每个分片底层其实是一个 Lucene 索引,可以存储大约21亿个文档。
副本分片是主分片的备份,主分片和备分片不会出现在同一个节点上,防止节点故障导致数据丢失。
网友评论