当前位置:网站首页>ES底层原理之倒排索引
ES底层原理之倒排索引
2022-07-07 10:22:00 【話吥哆先森丶】
目录
一、ElasticSearch架构原理
1、ElasticSearch集群的节点类型
Elasticsearch的一个实例是一个节点,一组节点形成一个集群。Elasticsearch集群中的节点可以通过三种不同的方式进行配置:
(1)Master节点
Master节点控制Elasticsearch集群,并负责在集群范围内创建/删除索引,跟踪哪些节点是集群的一部分,并将分片分配给这些节点。
(2)Data节点
数据节点用来保存数据和倒排索引。
(3)Client节点
如果将node.master和node.data设置为false,则将节点配置为客户端节点,并充当负载平衡器,将传入的请求路由到集群中的不同节点。
若你连接的是作为客户端的节点,该节点称为协调节点(coordinating node)。协调节点将客户机请求路由到集群中对应分片所在的节点。对于读取请求,协调节点每次选择不同的分片来提供请求以平衡负载。
(4)存储模型
使用称为倒排索引的数据结构,用于提供低延迟搜索结果
注意:索引数据的操作只会发生在主分片(primary shard)上,而不会发生在分片副本(Replica) 上。如果索引数据的请求发送到的节点没有合适的分片或者分片是副本,那么请求会被转发到含有主分片的节点。
2、不可变性
写入磁盘的倒排索引是不可变的,它有如下好处:
①不需要锁,提升并发能力,避免锁的问题
②数据不变,一直保存在os cache中,只要cache内存足够
③filter cache一直驻留在内存,因为数据不变
④可以压缩,节省cpu和io开销
坏处:
①每次都要重新构建整个索引
3、写和创建
1)通过索引中的主分片数量进行取模运算,以确定文档应被索引到哪个分片。 shard = hash(document_id) % (num_of_primary_shards)
2)当节点接收到来自协调节点的请求时,请求被写入到translog,并将该文档添加到内存缓冲区。
如果请求在主分片上成功,则请求将并行发送到副本分片。只有在所有主分片和副本分片上的translog被fsync’ed后,客户端才会收到该请求成功的确认。
- 内存缓冲区以固定的间隔刷新(默认为1秒),并将内容写入文件系统缓存中的新段。此分段的内容更尚未被fsync’ed(未被写入文件系统),分段是打开的,内容可用于搜索。
- translog被清空,并且文件系统缓存每隔30分钟进行一次fsync,或者当translog变得太大时进行一次fsync。这个过程在Elasticsearch中称为flush。在刷新过程中,内存缓冲区被清除,内容被写入新的文件分段(segment)。当文件分段被fsync’ed并刷新到磁盘,会创建一个新的提交点(其实就是会更新文件偏移量,文件系统会自动做这个操作)。旧的translog被删除,一个新的开始。
4、删除和更新
删除:每一个提交点包括一个.del文件,包含了段上已经被删除的文档当一个文档被删除,它是实际上只是在.del文件中被标记删除,亦然可以匹配查询,但最终返回之前会被从结果中删除。
更新:旧版本的文档被标记为删除,新版本的文档在新的段中索引
5、利用磁盘缓存实时检索
1)新收到的数据写入新的索引文件中,生成倒排索引叫做一个端--segment
2)使用一个commit文件记录索引内的所有segment
3)新数据进入内存buffer中
4)内存buffer生成一个新的segment,刷到文件系统缓存中,ES即可检测到新的segment
5)文件系统缓存真正同步到磁盘中,commit文件更新
6、translog提供磁盘控制
防止丢失(主机错误、磁盘故障)。当ES把数据写入buffer中,还记录了translog日志
二、倒排索引
1、单词----文档矩阵
文档1 | 文档2 | 文档3 | 文档4 | 文档5 | 文档6 | |
单词1 |
|
| ||||
单词2 |
|
| ||||
单词3 |
|
| ||||
单词4 |
|
| ||||
单词5 |
| |||||
单词6 |
|
2、倒排索引
1)、单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
2)、倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
3、倒排索引简单实例
假设文档集合包含四个文档,对这个文档集合建立倒排索引。
文档编号 | 文档内容 |
1 | 谷歌地图之父跳槽Facebook |
2 | 谷歌地图之父加盟Facebook |
3 | 谷歌地图创始人拉斯离开谷歌加盟Facebook |
4 | 谷歌地图之父拉斯加盟社交网站Facebook |
1)、取得关键词—分词处理
没有实际意义的:“的”,“是”,“in”,“too”;
标点符号、空格;
统一大小写:“a”,“A”。还原单词 lives-->live
2)、建立索引列表
文章位置、出现的频率、出现的位置
3)、应用原因
时间复杂度--1秒
单词ID | 单词 | 文档频率 | 倒排列表(DocID:TF:<Position>) |
1 | 谷歌 | 4 | (1:1:<1>),(2:1:<1>),(3:2:<1><6>),(4:1:<1>) |
2 | 地图 | 4 | (1:1:<2>),(2:1:<2>),(3:1:<2>),(4:1:<2>) |
3 | 之父 | 3 | (1:1:<3>),(2:1:<3>),(4:1:<3>) |
4 | 跳槽 | 1 | (1:1:<4>) |
5 | 4 | (1:1:<5>),(2:1:<5>),(3:1:<8>),(4:1:<8>) | |
6 | 加盟 | 2 | (2:1:<4>),(4:1:<5>) |
7 | 创始人 | 1 | (3:1:<3>) |
8 | 拉斯 | 2 | (3:1:<4>),(4:1:<4>) |
9 | 离开 | 1 | (3;1:<5>) |
10 | 社交 | 1 | (4:1:<6>) |
11 | 网站 | 1 | (4:1:<7>) |
有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。
边栏推荐
- Visual Studio 2019 (LocalDB)\MSSQLLocalDB SQL Server 2014 数据库版本为852无法打开,此服务器支持782版及更低版本
- Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
- Xiaohongshu microservice framework and governance and other cloud native business architecture evolution cases
- Programming examples of stm32f1 and stm32subeide -315m super regenerative wireless remote control module drive
- Complete collection of common error handling in MySQL installation
- 111.网络安全渗透测试—[权限提升篇9]—[Windows 2008 R2内核溢出提权]
- Review and arrangement of HCIA
- 顶级域名有哪些?是如何分类的?
- [texture feature extraction] LBP image texture feature extraction based on MATLAB local binary mode [including Matlab source code 1931]
- 108.网络安全渗透测试—[权限提升篇6]—[Windows内核溢出提权]
猜你喜欢
Mastering the new functions of swiftui 4 weatherkit and swift charts
Detailed explanation of debezium architecture of debezium synchronization
HCIA复习整理
千人規模互聯網公司研發效能成功之路
Unity中SmoothStep介绍和应用: 溶解特效优化
核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
Flet教程之 19 VerticalDivider 分隔符组件 基础入门(教程含源码)
《通信软件开发与应用》课程结业报告
Camera calibration (2): summary of monocular camera calibration
The Oracle message permission under the local Navicat connection liunx is insufficient
随机推荐
@What happens if bean and @component are used on the same class?
Introduction and application of smoothstep in unity: optimization of dissolution effect
Stm32f1 and stm32subeide programming example -max7219 drives 8-bit 7-segment nixie tube (based on SPI)
【最短路】ACwing 1127. 香甜的黄油(堆优化的dijsktra或spfa)
Sonar:Cognitive Complexity认知复杂度
一起探索云服务之云数据库
Unity map auto match material tool map auto add to shader tool shader match map tool map made by substance painter auto match shader tool
Review and arrangement of HCIA
总结了200道经典的机器学习面试题(附参考答案)
【滤波跟踪】基于matlab扩展卡尔曼滤波EKF和无迹卡尔曼滤波UKF比较【含Matlab源码 1933期】
即刻报名|飞桨黑客马拉松第三期盛夏登场,等你挑战
[texture feature extraction] LBP image texture feature extraction based on MATLAB local binary mode [including Matlab source code 1931]
<No. 8> 1816. 截断句子 (简单)
【紋理特征提取】基於matlab局部二值模式LBP圖像紋理特征提取【含Matlab源碼 1931期】
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
清华姚班程序员,网上征婚被骂?
Completion report of communication software development and Application
Flet教程之 16 Tabs 选项卡控件 基础入门(教程含源码)
Detailed explanation of debezium architecture of debezium synchronization
MATLAB实现Huffman编码译码含GUI界面