【ES入门一:基础概念】

集群层面上的基础概念

集群

由多个es实例组成的叫做集群

节点

单个ES的服务实例叫做节点。每个实例都有自己的名字,就是在配置文件中配置的'node.name'中的内容。为了标识每个节点,每个节点启动后都会分配一个UID,存储在data目录。每个节点受到集群的管理,我们可以通过增加或减少节点来达到扩容和减容的目的

集群中的节点是有分类的:

  • 主节点:主节点在整个集群中是唯一的,主节点主要负责管理集群变更,元数据的更改
  • 数据节点:负责保存数据,要扩产存储时需要扩展这类节点。数据节点负责执行数据相关的操作,如:搜索、聚合、crud。其对节点机器的CPU、内存、I/O要求都比较高
  • 协调节点:负责接口客户端的请求,将请求路由到对应节点进行处理,把最终结果汇总到一起返回给客户端,因为需要处理结果集和对其进行排序,需要较高的CPU和内存资源
  • 预处理节点:预处理操作允许在写入文档前通过定义的一些processors处理器和管道对数据进行转换。默认情况下节点启动后就是预处理节点
  • 部落节点:未来会淘汰
  • Hot&Warm Node: 不同硬件配置的节点,用来实现Hot&Warm架构的节点,有利于降低集群部署成本。例如,在硬件资源好的机器中部署Hot类型的数据节点,而在硬件资源一般的机器上部署Warm节点

在新版的ES中,是这样配置的

如上示例,node.roles的值是一个数组,说明一个节点可以有多个角色。node.roles的可选项如下:

机智的你会发现,上述类型中并没有协调节点的类型选项,那怎么设置一个节点为协调节点那? 其实每个节点本身就是一个协调节点,如果你一定要指定一个节点为协调节点的话,可以这样设置:

分片

分片的概念其实很好理解,试想一下如果家里的书多到一个箱子放不下,是不是要找另外一个箱子来装,这些书好比就是海量的数据,一个机器放不下,就放到多个机器上来存储

一般来说,面对海量数据的时候,分布式系统可以通过增加机器数量来进行水平拓展。所以,系统需要将数据分成几个小块数据,并且尽量均匀的分配到各个机器上,然后通过某种策略找到对应数据所在的位置。分片是ES底层最基本的读写单元,分片是为了分割巨大的索引数据,让读写可以有多台机器来完成,从而提高系统的吞吐量

副本

为了保证数据可靠性,一般分布式系统都会对数据进行冗余备份,这个备份就是副本。**ES将数据副本分为主从2个类型:主分片+副分片。**在写入的过程中,先写入主分片,成功后再并发写副分片,在数据恢复时以主分片为主。多个副本除了可以保证数据可靠性,还有一个好处就是可以承担系统的读负载

可以在创建索引的时候,指定分片数量和副本数量:

数据层面上的基础概念

索引(相当于数据库表)

索引是一类相似文档的集合。ES将数据存储在一个或多个Index中,例如将用户数据存储到User Index中,而将订单数据存储到Order Index中。一个索引有一个或者多个分片,索引的数据会以某种方式分散到各个分片上去存储

如上图,索引有3个分片,主分片分别是P1、P2、P3,队友的副本分别是R1、R2、R3,仔细看主分片和其他副本分片不会同时分配在同一个节点上。这样是保证当一个节点的主分配下线时,其他节点上的从副本可以升级为主分配,保证数据的可靠性

Mapping (相当于建表语句)

Mapping定义了索引里面的文档到底有哪些字段 以及字段的类型,类似于数据库中表结构的定义。Mapping有2种作用:

  • 定义索引中各个字段的名称和对应的类型
  • 定义各个字段、倒排索引的相关设置,如使用什么分词器

需要注意的是,Mapping一旦定义完成后,已经定义的字段的类型是不能更改的

文档(相当于表记录)

我们往Es中写入的每一条数据都是一个文档,并且我们搜索也是以文档为单位的,所以文档是ES中的主要实体

我们在kibana或者postman中测试插入一条书本记录:

然后在查一下这条记录:

顺便解释一下返回的字段含义:

  • _index:文档所属的索引名字,也就是books
  • _type:文档所属的类型名称,现在ES7.x统一为_doc
  • _id: 文档的唯一id。如果我们插入时不指定文档id,es会随机分配,这里有利于数据均匀分散到各个分片
  • _version:文档的版本信息,并发读写时可以解决文档冲突
  • _score:相关性算法,代表查询的匹配性
  • _seq_no和_primary_term:es内部用来保证主分片和副本数据一致性的,后面的章节中我们会进行介绍**。当一个index每次选择主分配后都会有一个序号,记为_primary_term,它是递增的。在同一个index下,每次写入数据后都会有一个写入顺序号,记为_seq_no, 它也是递增的。_primary_term 和 _seq_no 在逻辑上构成了一个文档写入的唯一位置。**

字段(相当于表字段)

每个文档都有一个或者多个字段,例如books索引指定了书本有2个字段book_id和name两个字段,其实就是Json中的key,常见的类型有keyword、text、数字类型(integer、long、float、double等)、对象存储

  • keyword:适合存储简短、结构化的字符串,比如产品名称、产品id
  • text适合存储全文本数据,比如:文件内容、短信内容

下面是一个简单的示例:

词项

将全文本的内容进行分词后得到的词语就是词项了。例如"programmmers love cat"使用标准分词器后得到【programmmer、love、cat】这3个词项。需要注意的是:分词器除了进行分词外还会进行大小写转换、去复数等操作

倒排索引和正排索引

相关推荐
2202_754421546 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
JH30737 分钟前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介9 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习10 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
冷心笑看丽美人10 分钟前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
HoneyMoose12 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热13 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余14 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp15 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang17 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型