ES-深入理解倒排索引
倒排索引
id | product | desc |
---|---|---|
1 | 新版 小米 至尊-纪念版手机 | |
1 | 小米 NFC 手机 | |
3 | NFC手机 | |
4 | 小米 耳机 | |
5 | 华为 耳机 | |
6 | 扫地机器人 | |
7 | 华为 Mata | |
…… | …… | …… |
term_index | term dictionary | posting list |
---------- | -------------- | ------------ |
小米 | 1……100W | |
华为 | 6,7,9 | |
NFC | 76,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是一个拥有大量用户的社交平台。这对于各种企业而言,也是一个十分优秀的营销平台…...

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…...

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

MySQL的基础知识
目录 关系型数据库 SQL通用语法 数据类型 数值类型 字符串类型 日期类型 SQL分类 DDL 数据库操作 表操作 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 权限控制 函数 字符串…...

【EI会议征稿】第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)
第七届大数据与应用统计国际学术研讨会(ISBDAS 2024) 2024 7th International Symposium on Big Data and Applied Statistics 第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)定于2024年3月8-10日在中国上海举行。会议旨在…...

最轻量级最完整的屏幕适配完全适配各个手机方案
当你看到这篇博客的时候,说明你已经迈出了惊人的一步,已经慢慢进入高级资深开发工程师行列了,这是开发之路必备技能。 当你接到一个任务时,每天按照需求原型、设计师UI图立刻积极的开发完成后,满满的兴高采烈去打包提测,板凳还没做安稳,测试人员就提了一个又一个的BUG,…...

IDEA安装python插件并配置
目录 一、Mac1. 安装插件2. 新建项目3. 下载第三方库4. 配置镜像源 一、Mac 1. 安装插件 在plugins中搜索python 2. 新建项目 使用本项目独享的虚拟环境,选择解释器 如果需要修改解释器可以进入project structure,在SDKs中点击,选择add py…...

简单的Python烟花代码,跨年了
运行效果 这一份烟花代码还是很有水分的,运行效果也是抽象 源代码 import turtle import random# 设置窗口大小 turtle.setup(400, 500)# 设置画笔 t turtle.Turtle() t.speed(0) t.color("red")# 画烟花 for i in range(50):t.penup()t.goto(random.r…...

社区医院儿童疫苗接种管理系统设计与开发
社区医院儿童疫苗接种管理系统设计与开发 摘要 自建国以来我国一直注重于卫生健康的建设,而儿童的生命健康更得到重视。疫苗接种作为有效防御疾病的手段之一,一直被广泛应用在世界各地。目前,有相当一部分社区准备使用信息管理系统来进行优…...

Docker下安装Redis
如果我们在Docker上直接拉取redis并运行镜像,当容器删除之后,redis容器里的数据不会被保存,所以我们在运行容器的时候,需要使用数据卷进行挂载,按照如下操作即可。 安装步骤 新建目录/opt/redis [rootlocalhost data…...

【python笔记】与网络编程相关的知识总结
前言 菜某的笔记总结 内网IP与公网IP 首先,我们知道全球电脑数量众多,但是IP有限,所以我们无法每人分配一个IP。 应对这种情况,我们就出现了内网IP和外网IP。 首先我的公司为路由器注册了一个公网IP,那么外界对我…...

【libGDX】Mesh立方体贴图(6张图)
1 前言 本文通过一个立方体贴图的例子,讲解三维纹理贴图的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下。 读者如果对 libGDX 不太熟悉,请回顾以下内容。 使用Mesh绘制三角形使用Mesh绘制矩形使用Mesh绘制圆形使用Mesh绘…...

数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云
一、前言 歌词上做文本分析,数据存储在网页上,需要爬取数据下来,词云展示在工作中也变得日益重要,接下来将数据爬虫与可视化结合起来,做个词云展示案例。 二、操作步骤 代码如下: # -*- coding:utf-8 -*-…...