一文轻松图解搞懂Elasticsearch原理!

认识倒排索引 分布式架构原理 写入数据的工作原理 写数据底层原理 读取数据的工作原理 搜索工作原理 删除/更新数据底层原理 es 的集群模式和 kafka 很像,kafka 又和 redis 的集群模式很像。总之就是相互借鉴!
不管你用没用过 es,今天我们一起聊聊它。就当扩展大家的知识广度了!
认识倒排索引 「正排索引 vs 倒排索引:」
正排索引 vs 倒排索引 「倒排索引包括两个部分:」
单词词典(term dictionary):记录所有文档的单词,记录单词到倒排列表的关联关系

单词词典一般比较大,可以通过 b+ 树 或 哈希拉链法实现,以满足高性能的插入与查询

倒排列表(posting list):记录了单词对应的文档结合,由倒排索引项(posting)组成:
  文档 id 词频 tf:该单词在文档中出现的次数,用于相关性评分
位置(position):单词在文档中分词的位置。用于语句搜索(phrase query)
偏移(offset):记录单词的开始结束位置,实现高亮显示
倒排索引 「elasticsearch 的倒排索引:」
elasticsearch 的 json 文档中的每个字段,都有自己的倒排索引
可以针对某些字段不做索引
优点:节省存储空间 缺点:字段无法被搜索 基于 spring boot + mybatis plus + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/yunaiv/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/ 分布式架构原理 「分片 shard:一个索引可以拆分成多个 shard 分片。」
主分片 primary shard:每个分片都有一个主分片。 备份分片 replica shard:主分片写入数据后,会将数据同步给其他备份分片。 将 es 集群部署在 3个 机器上(esnode1、esnode2、esnode3):
「创建个索引,分片为 3 个,副本数设置为 1:」
put /sku_index/_settings{    settings: {        number_of_shards : 3,        number_of_replicas: 1    }}响应:{  acknowledged : true} 分布式架构原理 「es 集群中有多个节点,会自动选举一个节点为 master 节点,如上图的 esnode2节点:」
主节点(master):管理工作,维护索引元数据、负责切换主分片和备份分片身份等。 从节点(node):数据存储。 「集群中某节点宕机:」
主节点宕机:会重新选举一个节点为 主节点。 从节点宕机:由 主节点,将宕机节点上的 主分片身份转移到其他机器上的 备份分片上。 基于 spring cloud alibaba + gateway + nacos + rocketmq + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/yunaiv/yudao-cloud 视频教程:https://doc.iocoder.cn/video/ 写入数据的工作原理 「写单个文档所需的步骤:」
客户端选择一个 node 发送请求,那么这个 node 就称为 「协调节点(coorinating node)」 。
node 使用文档 id 来确定文档属于分片 0,通过集群状态中的内容路由表信息获知分片0 的主分片在 node1 上,因此将请求转发到 node1 上。
node1 上的主分片执行写操作。如果写入成功,则将请求并行转发到 node3 的副分片上,等待返回结果。
当所有的副分片都报告成功,node1 将向 node (协调节点)报告成功。
写入数据的工作原理 「tips:客户端收到成功响应时,意味着写操作已经在主分片和所有副分片都执行完成。」
写数据底层原理 写数据底层原理 「写操作可分为 3 个主要操作:」
写入新文档: 这时候搜索,是搜索不到。
  将数据写入内存 将这操作写入 translog 文件中 refresh 操作: 默认每隔 1s ,将内存中的文档写入文件系统缓存(filesystem cache)构成一个 segment

这时候搜索,可以搜索到数据。

  「1s 时间:es 是近实时搜索,即数据写入 1s后可以搜索到。」 flush 操作: 默认每隔 30 分钟 或者 translog 文件 512mb ,将文件系统缓存中的 segment 写入磁盘,并将 translog 删除。
「translog 文件:」 来记录两次 flush(fsync) 之间所有的操作,当机器从故障中恢复或者重启,可以根据此还原
translog 是文件,存在于内存中,如果掉电一样会丢失。 「默认每隔 5s 刷一次到磁盘中」 读取数据的工作原理 「读取文档所需的步骤:」
客户端选择一个 node 发送请求,那么这个 node 就称为 「协调节点(coorinating node)」 。 node 使用文档 id 来确定文档属于分片 0,通过集群状态中的内容路由表信息获知分片0 有 2 个副本数据(一主一副),会使用随机轮询算法选择出一个分片,这里将请求转发到 node1 node1 将文档返回给 node,node 将文档返回给客户端。 读取数据的工作原理 「在读取时,文档可能已经存在于主分片上,但还没有复制到副分片,这种情况下:」
读请求命中副分片时,可能会报告文档不存在。 读请求命中主分片时,可能成功返回文档。 搜索工作原理 「搜索数据过程:」
客户端选择一个 node 发送请求,那么这个 node 就称为 「协调节点(coorinating node)」 。 node 协调节点将搜索请求转发到所有的 分片(shard):主分片 或 副分片,都可以。 「query 阶段」 :每个分片 shard 将自己的搜索结果(文档 id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。 「fetch 阶段」 :由协调节点根据 文档 id 去各个节点上拉取实际的文档数据。 搜索工作原理 举个栗子: 有 3 个分片,查询返回前 10 个匹配度最高的文档
每个分片都查询出当前分片的 top 10 数据 「协调节点」 将 3 * 10 = 30 的结果再次排序,返回最终 top 10 的结果。 删除/更新数据底层原理 「删除操作」 :commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。 「更新操作」 :就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。 「底层逻辑是:」


比特币到底是一个什么东西
经纬恒润为国产化芯片的AoU功能安全软件赋能
想实现智能制造,传统条形码已经OUT了
H桥互补对称输出及低通滤波电路
华为宣布与腾讯游戏达成战略合作 将成立联合创新实验室
一文轻松图解搞懂Elasticsearch原理!
旅行手机充电器电路图详解
压敏电阻选型与应用
基于74HC595A实现多位LED串行显示电路设计
防爆型电容电抗器是如何抑止和操纵谐波的
一文知道留声机大铜喇叭有没有线圈
华为降价快?华为荣耀8发布半年价格依旧,颜值逆天不得不服
AR远程协同技术可以为工业领域带来哪些帮助?
iQOOPro5G正式发布 3798元售价成迄今为止最便宜的5G手机
苹果WWDC 2017大会十大看点 iOS11将会是主角
电磁兼容测试工程中的峰值准峰值和平均值解析
邦纳传感器在各个领域中的应用介绍
基于WiFi+蓝牙技术的智能家居解决方案
燧原科技基于HAPS构建高效安全的AI芯片软件
华为P10怎么样?华为P10钻雕蓝上手图赏:大气不失时尚!