ES-深入理解倒排索引

倒排索引

idproductdesc
1新版 小米 至尊-纪念版手机
1小米 NFC 手机
3NFC手机
4小米 耳机
5华为 耳机
6扫地机器人
7华为 Mata
………………
term_indexterm dictionaryposting list
------------------------------------
小米1……100W
华为6,7,9
NFC76,90
耳机5352
红米643,98
机器人645,9806
………………

我们引入这两个表格来理解倒排索引,第一个表是真实的数据,我们根据product这个字段进行分词,然后拆分的词为term dictionary,然后将id,存在posting list。
在这里插入图片描述
对于倒排表有两种压缩算法进行存储
1 Frame OF Reference 索引帧(FOR)
在这里插入图片描述
真正的ES存储是类似于第二个例子,采用分组的形式。这大概就是FOR的压缩逻辑,但是缺陷就是如果数据特别离散压缩效果不会很好,采用RBM来进行存储。
2 Roaring BitMap 咆哮位图(RBM)
在这里插入图片描述
对于词项字典我们对应的也有方式来存储
1 先来了解一下前缀树
前缀树有一定的复用,每一个终端节点就是一个单词,我们发现如果不是终端节点比如我们查找AB在这里面是找不到的,同时最后DF也是没有复用的存储了多次,因此需要进一步优化。
在这里插入图片描述

2 基于前缀树的优化
2.1 有限状态机
有限个状态 同一时间只能处于同一个状态 不同状态之间可以相互转换 状态是无序的
就像下面这张图,我只话了部分边,就是哥哥状态可以相互转换。
在这里插入图片描述
2.2 有限状态接收机
在前缀树的基础上我们插入jksj jksjtech jkb estech
4 和 8 为终止节点 数据在边上 节点是数字 如果插入一个单词当前比如之前没有jkb当插入到b的时候发现没有这个字母,则会选择一个红色的节点作为结束,为什么不选4因为选四就会多一个单单词jksjb但实际我们没有不符合我们的期望。
在这里插入图片描述
这个里面是否存在ES呢?
其实是不存在的,我们没有插入ES,但是es恰好在终止节点,所以多存储了一些不存在的数据。所以这样优化还是不够需要进一步看下面的结构。
2.3 有限状态转换机(FST)
FST最重要的功能是可以实现Key到Value的映射,相当于HashMap。FST的查
询速度⽐HashMap要慢⼀点但FST的内存消耗要⽐HashMap少很多。FST在
Lucene中被⼤量使⽤,例如:倒排索引的存储,同义词词典的存储,搜索关键
字建议等
比如我们有下面这几个数据:
后面这个数字一般是由机器算出来的,这个值是来解决上面的问题,也就是来校准是否真的存在例如es这种例子。
jksj/10
jksjtech/5
jkb/2
在这里插入图片描述
当我们插入jksj的时候 j:10 后面的字母都为0就可以 也可以k:10其它数字都为0
但是我们插入jksjtech 这个时候j前面的权重和必须要小于等于5,不然jksjtech 不可能为5 所以这个时候可以j:5 然后把另外的5放到output也里面去,也就是在终止节点开外挂。当然前面值可以任意分配只要不超过5 比如j:3 k:2 s: 0 :j + 外挂值 如果为终止节点则会加外挂这样就满足了我们的需要。
jkb/2 后面插入jkb的时候同样的原理会从新分配路径上的值。

2.4 ES的存储逻辑
frontier[]
⽤来存放UnCompiledNode,即待处理的节点(未持久化的节点)
current[]
存放CompiledNode,即最终的节点,存储(持久化以后的节点)

在这里插入图片描述

ARC {label 值,output 节点字面信息, target(包含一个flag 下一个节点的头补信息 && 下一个节点的label) 指向的节点}。

在这里插入图片描述

abd
abe
abfi
abfj
abfk
abgl
abgm
abgn
abgo
abgp
abgq
abgr
abh
ac
这个是字典序排好以后进行插入,来理解FST的过程:
首先插入abd, 然后插入abe代表d结尾的Node结束了可以进行落盘,按照这个逻辑只要后面与这个节点无关了就可以进行落盘,然后如果达到了每个block的最大数量最后就会进行分裂,整个过程就是不停的落盘生成子文件,子文件进行分裂,形成了上面这张图的文件结构。其中有一些术语,pending block是等待落盘的,floor block是已经落盘的。pending trem是一个单独的也就是没有其它字符共享block。
term index的存储

图片来源:图片来源地址
在这里插入图片描述

参考资料 极客时间ES

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中进行特征重要性分析的8个常用方法

更多资料获取 📚 个人网站:ipengtao.com 在机器学习和数据科学领域,理解特征在模型中的重要性对于构建准确且可靠的预测模型至关重要。Python提供了多种强大的工具和技术,能够探索特征重要性的各个方面。 本文将详细介绍8种常用…

记录一次爱快路由ACL策略引起的大坑

环境: A公司和B公司采用爱快的ipsec互联 B公司同时有加密软件限制网络 问题:对方ERP无法连接我们的数据库服务器 先简单测试了下1433端口是不是通的 下面的测试结果,直接ping是通的,但是加上1433端口后就不通 排查过程&#xff1…

《功能磁共振多变量模式分析中空间分辨率对解码精度的影响》论文阅读

《The effect of spatial resolution on decoding accuracy in fMRI multivariate pattern analysis》 文章目录 一、简介论文的基本信息摘要 二、论文主要内容语音刺激的解码任务多变量模式分析(MVPA)K空间 空间分辨率和平滑对MVPA的影响平滑的具体过程…

PHP实践:用ThinkPHP6完整实现用户分页功能

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

Linux基本指令(后篇)

目录 14.时间指令date 15.Cal指令 16.find指令(非常重要) 17.grep指令 18.打包压缩指令zip和tar以及解压指令unzip和tar 14.时间指令date date(显示当前时间) 1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中…

SSM项目实战-mapper实现

1、SysUserMapper.java package com.atguigu.schedule.mapper; import com.atguigu.schedule.pojo.SysUser; import org.springframework.stereotype.Repository; Repository public interface SysUserMapper {SysUser getSysUser(SysUser sysUser); }2、ScheduleMapper.java p…

拉新地推任务管理分销助手公众号开发

拉新地推任务管理分销助手公众号开发 拉新地推任务管理分销助手公众号开发功能可以帮助企业进行地推任务的管理和分销助手的开发。以下是一些可能的功能介绍: 任务管理:这个功能可以让企业创建、分配和管理地推任务。管理员可以创建地推任务&#xff0c…

Java流处理之序列化和打印流

文章目录 序列化概述ObjectOutputStream类构造方法序列化操作 ObjectInputStream类构造方法反序列化操作1**反序列化操作2** 案例:序列化集合案例分析案例实现 打印流概述PrintStream类构造方法改变打印流向 序列化 概述 Java 提供了一种对象序列化的机制。用一个…

【【FPGA 之 MicroBlaze定时器中断实验】】

FPGA 之 MicroBlaze定时器中断实验 AXI Timer 具有 AXI 总线接口,能够产生不同时间周期和占空比的时钟、脉冲产生电路、产生与时间有关的中断和用于电机控制的脉宽调制信号。 AXI Timer IP 核提供了一个 AXI4 Lite 接口用于与处理器通信;它内部有两个可…

引领数据趋势:2023年最值得关注的十大ETL数据集成工具

在这个数据至上的时代,对于以数据为驱动的组织来说,建立一个信息集中的强大源头是成功的关键。众多企业依靠ETL工具来管理和理解它们的数据。 ETL,即提取(Extract)、转换(Transform)、加载&…

Jenkins持续集成之修改jenkins工作目录

修改jenkins工作目录 一般不建议把工作目录放到默认的C盘,故可以更改到其他盘中 前置条件:先在其他盘中新建工作目录的文件;如下图 1、首先打开任务管理器,找到服务中的Jenkins进程 2、右击点击转到详细信息; 3、再右…

四大视角看EMC设计:滤波、接地、屏蔽、PCB布局

电磁干扰的主要方式是传导干扰、辐射干扰、共阻抗耦合和感应耦合。对这几种途径产生的干扰我们应采用的相应对策:传导采取滤波,辐射干扰采用屏蔽和接地等措施,就能够大大提高产品的抵抗电磁干扰的能力,也可以有效的降低对外界的电…

EPICS motor模块中SoftMotor的使用示例

本实例使用motor模块中软电机,通过通道访问控制另一个直流电源IOC的输出电压,并且回读输出电压。 此处使用的另一个IOC为:基于EPICS stream模块的直流电源的IOC控制程序实例-CSDN博客 1)创建这个IOC程序目录结构,操作…

pnpm 安装

npm install pnpm -g 解决方案: 1、使用管理员的身份打开powershell, win x 2、输入 set-executionpolicy remotesigned 后按y,问题得到解决 其他: pnpm 安装完成只有,可设置其镜像 1、查阅当前镜像(源&#xff09…

Python常用库大全及简要说明,附官方网站链接地址

文章目录 前言环境管理包管理包仓库分发构建工具交互式解析器文件日期和时间文本处理特殊文本格式处理自然语言处理文档配置命令行工具下载器图像处理OCR音频Video地理位置HTTP数据库数据库驱动ORMWeb 框架权限CMS电子商务RESTful API验证模板引擎队列搜索动态消息资源管理缓存…

HarmonyOS ArkTS与c++交互通信

一、创建Native C Module 1、右键项目->new->module 如图: 2、修改build-profile.json5配置 "externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt","arguments": "-v -DOHOS_STLc_shared&quo…

Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊

文章目录 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊使用 RenderEffect 模糊使用 Vukan 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊 本文首发地址 https://blog.csdn.net/CSqingchen/articl…

运算放大器和常见运放电路

关于运算放大器 运算放大器(Operational Amplifier), 简称运放, 是一种直流耦合, 差模输入, 单端输出(Differential-in, single-ended output)的高增益电压放大器件. 运放能产生一个比输入端电势差大数十万倍的输出电势. 因为刚发明时主要用于加减法等运算电路中, 因而得名运算…

LLM算法工程师面试题总结

一、请简述对大模型的基本原理和架构的理解。 大型语言模型如GPT(Generative Pre-trained Transformer)系列是基于自注意力机制的深度学习模型,主要用于处理和生成人类语言。下面简要概述了它们的一些基本原理和架构特点: 基本原…

线上问题整理-ConcurrentModificationException异常

项目场景: 商品改价:商品改价中通过多线程批量处理经过 Lists.partition拆分的集合对象 问题描述 商品改价中通过多线程批量处理经过 Lists.partition拆分的集合对象,发现偶尔会报 java.util.ConcurrentModificationException: nullat jav…