Elastic search入门到集群实战操作详解(原生API操作、spring

1.4.测试集群中创建索引库
配置,再重启
搭建集群以后就要创建索引库了,那么问题来了,当我们创建一个索引库后,数据会保存到哪个服务节 点上呢?如果我们对索引库分片,那么每个片会在哪个节点呢?
这个要亲自尝试才知道 。
这里给搭建看看集群中分片和备份的设置方式,示例:
PUT /lagou { "": { "": 3, "": 1 } }
这里有两个配置:
通过浏览器的head查看,我们可以查看到分片的存储结构:
可以看到,test这个索引库,有三个分片,分别是0、1、2,每个分片有1个副本,共6份 。
node-01上保存了1号分片和2号分片的副本
node-02上保存了0号分片和2号分片的副本
node-03上保存了0号分片和1号分片的副本
1.5.集群工作原理 1.5.1.shad与机制
(1)一个index包含多个shard,也就是一个index存在多个服务器上
(2)每个shard都是一个最小工作单元,承载部分数据,比如有三台服务器,现在有三条数据,这三条数 据在三台服务器上各方一条. (
3)增减节点时,shard会自动在nodes中负载均衡
(4) shard(主分片)和 shard(副本分片),每个肯定只存在于某一个shard以及其对应的 shard中,不可能存在于多个 shard
(5) shard是 shard的副本,负责容错,以及承担读请求负载
(6) shard的数量在创建索引的时候就固定了,shard的数量可以随时修改
(7) shard的默认数量是5,默认是1(每个主分片一个副本分片),默认有10个 shard,5个 shard,5个 shard
(8) shard不能和自己的 shard放在同一个节点上(否则节点宕机,shard和 副本都丢失,起不到容错的作用),但是可以和其他 shard的 shard放在同一个节点上
1.5.2.集群写入数据
1. 客户端选择一个node发送请求过去,这个node就是 node (协调节点)
2.node,对进行路由,将请求转发给对应的node 。(根据一定的算法选择 对应的节点进行存储)
3. 实际上的node上的 shard处理请求,将数据保存在本地,然后将数据同步到 node
4.node,如果发现 node和所有的 node都搞定之后,就会返回请求到 客户端
这个路由简单的说就是取模算法,比如说现在有3太服务器,这个时候传过来的id是5,那么5%3=2,就 放在第2台服务器
1.5.3.ES查询数据
倒排序算法
查询有个算法叫倒排序:简单的说就是:通过分词把词语出现的id进行记录下来,再查询的时候先去查到哪 些id包含这个数据,然后再根据id把数据查出来
查询过程
1. 客户端发送一个请求给 node
2. 协调节点将搜索的请求转发给所有的shard对应的 shard 或 shard
3. query phase(查询阶段):每一个shard 将自己搜索的结果(其实也就是一些唯一标识),返回 给协调节点,有协调节点进行数据的合并,排序,分页等操作,产出最后的结果
4. fetch phase(获取阶段),接着由协调节点,根据唯一标识去各个节点进行拉取数据,最终返回 给客户端
2.客户端 2.1.客户端介绍
在官网中提供了各种语言的客户端: nt/index.html
注意点击进入后,选择版本到 6.2.4,因为我们之前按照的都是 6.2.4 版本:
2.2.创建Demo工程 2.2.1.初始化项目
创建项目 。
2.2.2.pom文件
注意,这里我们直接导入了的启动器,方便后续讲解 。不过还需要手动引入的 High-level-Rest-的依赖:
1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-devtools