当前位置: 首页 > news >正文

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

相关文章:

ES-深入理解倒排索引

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

linux NAT网卡配置static

由于是内网,资料无法拷贝,借助参考资料,整理发出。 镜像安装 基本操作。 查看VM配置 图1,有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255,对应下面配置的N…...

信奥编程 1168:大整数加法

解析:在c中需要考虑这么几个问题,第一个是大数据的输入,第二个是大数据的存储,第三是大数据的计算方式,最后是输出。 针对上述几个问题,第一个问题,采用字符串的方式或者数组加循环的方式接收输…...

k8s上Pod全自动调度、定向调度、亲和性调度、污点和容忍调度详解

目录 一.Pod调度简介 二.Deployment/RC全自动调度 1.简介 2.案例演示 (1)Deployment (2)RC 三.nodeSelector/nodeName指定节点调度 1.原理简介 (1)nodeSelector原理 (2)no…...

C# 动态编译代码并执行

写在前面 本文采用动态编译的方式,对目标文件code.txt中的C#代码进行实时编译并调用;当然也可以直接在代码中直接装配或读取已有的代码文本,动态编译可以用于很多需要热更新的场景,实现无需重启程序也能达到更新代码的需求。 代…...

nginx配置反向代理及负载均衡

目录 1.前端发送的请求,是如何请求到后端服务的1.nginx 反向代理的好处:2.nginx 反向代理的配置方式:3. nginx 负载均衡的配置方式 1.前端发送的请求,是如何请求到后端服务的 1.nginx 反向代理的好处: 提高访问速度 因…...

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明: 1. 话题模型 图示 说明 2. 实现过程(C) 创建订阅者代码(C) 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程(Python) 创建订阅者代码(Python&…...

Java全栈基础篇--集合

集合 集合:集合是java中提供的一种容器,可以用来存储多个数据。 特点: 长度不固定,还可以存储不同的数据(但是一般都用同一类型) 集合和数组既然都是容器,它们有啥区别呢? 数组的长…...

Facebook公共主页受限、被封?一文教你排雷解决

一、Facebook公共主页是什么? 现在人们的生活已经离不开各种社交媒体,只要有智能手机,或多或少会使用一些社交平台,而Facebook是一个拥有大量用户的社交平台。这对于各种企业而言,也是一个十分优秀的营销平台&#xf…...

Day04:每日一题:2661. 找出叠涂元素

2661. 找出叠涂元素 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。 arr 和 mat 都包含范围 [1,m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 arr 中在 mat…...

SpringBoot 整合Redis

在Spring Boot中,你可以使用以下注解来实现Redis的整合: EnableCaching: 在启动类上添加该注解,开启Spring的缓存支持。 Cacheable: 标记方法的返回值可被缓存。当缓存中存在相同 key 的数据时,直接从缓存中获取数据,否则执行方法…...

tensorflow-gpu1.15 + win11 + RTX 4050环境配置

组了一套,不知道行不行 windows11GPURTX 4050python3.7.12tensorflow-gpu1.15.0cudatoolkit10.0.130cudnn7.6.5Keras2.3.1...

jmeter资料

1.jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象…...

代码随想录算法训练营第三十六天| 435 无重叠区间 763 划分字母区间 56 合并区间

目录 435 无重叠区间 763 划分字母区间 56 合并区间 435 无重叠区间 将intervals数组按照左端点进行升序排序。 设置变量len标志此时新加入端点后所有区间的位置,将其赋初值为第一对区间的右端点,因为该点是一定可达的。设置变量res来存储需要移除空间…...

2023-12-01 事业-代号s-引流技巧和营销思路

摘要: 2023-12-01 事业-代号s-引流技巧和营销思路 引流技巧和营销思路 独立站流量渠道主要有以下几种:1、CPC付费广告:搜索引擎、社交平台、广告联盟平台。2、网红营销:youtube、INS、博客论文、TT直播。适合比较时尚品类3、Affiliate促销网站:优惠券折扣网站发布产品优惠…...

反转链表的Java实现

1. 题目 反转链表,例如,原链表1-2-3-4-5,反转后为5-4-3-2-1。 2. 迭代法实现 private ListNode reverseList(ListNode head) {if(head null || head.next null){return head;}ListNode cur head.next;head.next null;while(cur ! null…...

2022年1月14日 Go生态洞察:Go 1.18 新教程探索

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换

立足特定应用领域的创新型企业 上海某半导体公司是中国10大集成电路设计公司之一的子公司。该半导体公司是一家特色工艺集成电路芯片制造企业,专注模拟电路、功率器件所需的特色生产工艺研发与制造,。 该半导体公司不断追求创新,提高自身产…...

14.Tomcat和HTTP协议-[一篇通]

文章目录 1.HTTP 协议1.1HTTP 是什么1.2理解 "应用层协议"1.3理解 HTTP 协议的工作过程1.4HTTP 协议格式1.4.1抓包工具的使用(Fiddler)1.4.2抓包工具的原理1.4.3抓包结果1.4.4协议格式总结 1.5HTTP 请求 (Request)1.5.1认识 URL1.5.1.1URL 基本格式1.5.1.2关于 URL e…...

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中,在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术,这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

【生成模型】视频生成论文调研

工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...