Lucene 倒排索引

news2024/11/27 14:46:30

倒排索引是什么?

【定义】倒排索引(Inverted Index)是一种用于信息检索的数据结构,尤其适用于文本搜索。它与传统索引的主要区别在于,传统索引是根据文档来查找词语的位置,而倒排索引则是根据词语来查找文档。倒排索引在搜索引擎、数据库系统以及自然语言处理等领域有着广泛的应用。

倒排索引的结构包含:

  • 词项索引(term index):存放在 .tip 文件中。存放 FST 的公共前缀和公共后缀。
  • 词项字典:存储的关键词,使用 FST(Finite State Transducer) 数据结构压缩。存放在 .tim 文件中。后缀词块,倒排表的指针。
  • 倒排表:存储的是:包含当前词项的文档 ID 有序列表,是 int 型。int 的最大值是 2^32 ,所以分片存储的文档是有上限的。存放在 .doc 文件中。

由于词典的 size 会很大,全部装载到 heap 里不现实,因此Lucene为词典做了一层前缀索引(Term Index),这个索引在Lucene4.0以后采用的数据结构是FST (Finite State Transducer)。 这种数据结构占用空间很小,Lucene 打开索引的时候将其全量装载到内存中,加快磁盘上词典查询速度的同时减少随机磁盘访问次数

FST 可以理解为前缀树的变种,FST 不但利用公共前缀,还是利用了公共后缀。FST 的对空间的空间的压缩还大。

Lucene4+ 开始大量使用数据结构:FST(Finite State Transducer)

FST 优点:

  1. 空间占用小,通过对字典中单词前缀和后缀的重复利用,压缩存储空间。
  2. 查询速度快。时间复杂度: O(len(str))
term indexterm dictionary(词项字段)Posting list(倒排表)标记匹配
小米1,2,4
手机1,2,3
NFC4,5

索引结构

倒排索引核心算法

倒排表的压缩算法

Posting list 使用的压缩算法:(高效压缩、快速的编码解码)

  • FOR(Frame Of Reference):针对稠密数组压缩。稠密的定义:数组中数据差值比较小

    • 核心思想:用减法来削减数值大小,从而达到降低空间存储。
  • RBM(Roaring Bit Map):针对稀疏数组压缩。稀疏的定义:数组中数据差值比较大

    • 解决 FOR 算法缺陷:如果减法的结果差值,依然很大。
    • 核心思想:通过除法来缩减数值大小,但是并不是直接的相除。将一个数拆成高 16 位和低 16 位。

FOR

如下图:Posting list 中是升序排列的 6 个 int 数据。

压缩前数据所占空间为:4 byte * 6 = 24 byte

接下来看 FOR 的压缩过程

  1. 第一位数保留原始数据,从第二数起,保留与前一位数的差值,如下图 Deltas list
  2. 根据 Deltas list 中数据稠密程度划分出小数组(自动划分)
    1. 【目的】小数组内每个数据占用的空间,都是有小数组内最大的数据所决定。划分小数组的目的,也是为了进一步压缩空间。避免一个大数据,导致所有数据都必须占用这么大的空间。
  3. 根据每个小数组中的最大值,确定每个数据的占用空间
    1. 左边数组的最大值为 277,至少占用 8 个 bit: 2 8 = 512 2^8= 512 28=512。那么左边数组需要占用:2 * 8bit = 16 bit
    2. 右边数组的最大值为 30,至少占用 5 个bit: 2 5 = 32 2^5= 32 25=32。那么右边数组需要占用:4 * 5bit = 20 bit
  4. 每个小数组中每个数占用的空间也需要记录一下,解码时需要使用。下图 8 bit 和 5bit 也各需要一个 1 byte 的空间存储
  5. 程序中的数据都是使用字节存储的。因此需要将 bit 转换为字节。16 bit = 2 byte;20 bit = 3 byte。20 bit 必须用 3 byte 存储。
  6. 因此最终压缩后数据占用空间为:1 byte + 2 byte + 3 byte + 1 byte = 7 byte。空间压缩了 2/3

RBM

RBM(Roaring Bit Map):针对稀疏数组压缩。稀疏的定义:数组中数据差值比较大。

核心思想:通过除法来缩减数值大小,但是并不是直接的相除。将一个数拆成高 16 位和低 16 位。

如下图:posting list 的差值也非常大。可以使用 RBM 算法进行压缩。

Posting list 中是升序排列的 6 个 int32 数据。

  1. 通过除以 2 16 = 65536 2^{16}=65536 216=65536 ,获取到高 16 和低 16 两个 short 数
  2. 以高 16 数给key,以低 16 数为 value,构建倒排列表

Short[] 数组存放高位,相同高位存放 value。

支撑的 container 的类型:

  1. ArrayContainer:container 中的数据以 short 数组形式存储。

    1. container 中的数据是升序且不重复的。并且最多有 65536 个数。因此最大占用空间为:(65536*16/2)/1024=128KB。

    2. 当 value 小于2096 个数或者 8KB时,使用 ArrayContainer。否则使用 BitMapContainer。

  2. BitMapContainer:container 中的数据用 bitMap 存储。

    1. bitMap:要支持 65536 位的数据存储,占用空间为:(65536/8)/1024 = 8KB

    2. bitMap 占用的空间是固定,无论多少数据都是 8KB。

      1. 因此但数据量小于 2096 个时,使用 ArrayContainer 比较合适。

      2. 因此但数据量大于 2096 个时,使用 BitMapContainer 比较合适。

  3. RunContainer:此 container 适合存储连续数据。如下图:有 100w 个连续数据,那么直接存储一个范围即可。

词项索引的压缩算法

【定义】FST 是 Finite State Transducer 的缩写,是一种计算模型,它是有限状态自动机(Finite State Automaton, FSA)的一种扩展。FST 可以看作是一个双向的自动机,它在读取输入的同时产生输出。

【用途】FST 常用于自然语言处理、编译器设计、模式识别等领域,用于处理和转换数据,例如文本的自动翻译、语音识别与合成等。

与前缀树相比,FST 不但能够共享前缀,还能共享后缀。

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

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

相关文章

【云从】三、计算机网络基础

文章目录 1、网络2、网络通信2.1 IP地址2.2 子网掩码2.3 网关2.4 私有地址和公有地址2.5 NAT网络地址转换 3、网络架构及设备 1、网络 网络,即通过通信线路(如光纤、网线)和通信设备(如路由器、光猫),将各…

切换按钮组动画效果

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>按钮切换动画</title><style>body {disp…

【隐私计算】隐语HEU同态加密算法解读

HEU: 一个高性能的同态加密算法库&#xff0c;提供了多种 PHE 算法&#xff0c; 包括ZPaillier、FPaillier、IPCL、Damgard Jurik、DGK、OU、EC ElGamal 以及基于FPGA和GPU硬件加速版本的Paillier版本。 本文我们会基于GPU运行HEU Docker容器&#xff0c;编译打包GPaillier并测…

C++常用库函数

大小写转换 islower/isupper函数 用于检查一个字符是否为小写或大小字母&#xff0c;需要包含头文件< cctype >,也可以包含万能头文件< bits/stdc.h >.函数返回值类型为bool类型。 int main() {char ch1 A;char ch2 b;//使用islower函数判断是否为小写字母if …

springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)

相册页面及功能展示&#xff1a; react前端结构及代码&#xff1a; Java后端结构及代码 数据库结构&#xff1a; photo&#xff1a; user 这是首个利用AI自有知识构建的简易相册系统&#xff0c;项目是react构造前端spring boot构造后端。 前端有四个主要页面&#xff1…

深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec

文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号。向量是人把自然界的东西抽象出…

MySQL创建电子订阅表相关指令(创建,删除,查询,说明,添加)

利用以下代码创建一个名字为one的数据库。 查看数据库是否创建完成 。 创建一个在one数据库中的表格&#xff0c;括号里是字段名和数据类型&#xff0c;用逗号隔开&#xff0c;给id设置主键&#xff0c;确保id的唯一性。 INSERT INTO 为添加数据&#xff0c;one.subscribe中o…

第 1 章 MyBatis快速入门

1.1 ORM简介 ORM&#xff08;Object Relational Mapping&#xff0c;对象——关系映射&#xff09;框架的主要功能是根据映射配置文件&#xff0c;完成数据在对象模型与关系模型之间的映射&#xff0c;同时出屏蔽了连接数据库、创建 Statement 对象、执行 SQL、读取 ResultSet…

DSP 如何在调试时便捷查看数组元素

背景描述: 在CCS调试过程中&#xff0c;需要查看一些变量的值&#xff0c;但是数组只能显示第一个元素的值&#xff0c;不能全部展示出来&#xff0c;这样就不便于查看了。 解决方法: 找到变量显示窗口 选中数组右键 设置开始元素和需要展示的个数 这样就可以把数组展开…

Java->Map和Set

目录 一、搜索树 1.概念 2.查找 3.插入 4.删除 二、搜索 1.Map的使用 1.1关于map的说明 1.2map的常用方法 2.Set的使用 2.1关于set的说明 2.2set的常用方法 三、哈希表 1.概念 2. 哈希冲突 3.冲突避免 3.1哈希函数的设计 3.2负载因子调节 4.解决冲突 4.1闭…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程&#xff0c;即从具体的事实归结出一般性规律&#xff1b;后者则是从一般到特殊的“特化”(specialization)过程&#xff0c;即从基础原理推演出具体状况。例如&a…

一款功能强大的颜色选择工具ColorPicker

ColorPicker 是一款轻量级且功能强大的颜色选择工具&#xff0c;专为设计师、开发者以及需要在日常工作中处理颜色的用户设计。该工具允许用户从屏幕上的任意位置快速获取颜色代码&#xff0c;并提供多种格式的颜色值输出&#xff0c;包括RGB、HEX、HSB等。 ColorPicker的界面…

YOLO的相关改进机制

我的面包多平台有多种关于YOLO的改进&#xff0c;大家尽早关注&#xff0c;不迷路

opencv 答题卡检测项目实现

在教育和考试领域&#xff0c;答题卡自动评分系统能够大大提高效率和准确性。本文将介绍如何使用OpenCV库实现一个简单的答题卡检测项目。这个项目包括读取图像、检测答题卡轮廓、透视变换、二值化处理、检测选择题答案&#xff0c;并最终计算得分。 导入库和定义常量 import …

动态规划-路径问题——931.下降路径最小和

1.题目解析 题目来源&#xff1a;931.下降路径最小和——力扣 测试用例 2.算法原理 1.状态表示 我们可以开辟一个dp表&#xff0c;多开辟一行两列用来存储虚拟位置&#xff0c;dp[i][j]表示从第一行到该位置的最小路径和 2.状态转移方程 由于要找到最小路径和&#xff0c;并且由…

中间件镜像升级策略

进入集群 kubectl edit deployments paas-bmm-v1 -n kube-system 修改容器 abcsys.cn:5000/boc3.7/bmm-web-v4:latest-202410091355

【芯片知识】 | 浅谈NRK3502语音芯片IC的工作原理

随着科技的快速发展&#xff0c;语音技术逐渐渗透到我们生活的各个领域&#xff0c;如智能家居、车载导航、手机通讯等。作为语音技术的核心&#xff0c;语音芯片在其中发挥着重要作用。今天&#xff0c;我们将深入探讨NRK3502这款先进的语音芯片IC的工作原理&#xff0c;以及它…

动态规划-路径问题——174.地下城游戏

1.题目解析 题目来源&#xff1a;174.地下城游戏 测试用例 2.算法原理 1.状态表示 通常dp[i,j]可以表示终点也可以表示起点&#xff0c;在本题中如果表示为终点&#xff0c;即勇士到[i,j]位置所需要的最小生命值&#xff0c;但是由于后续位置的未知无法向后继续判断&#xff…

如何判断外包建站公司靠谱与否?2024外包网站设计公司哪家好top3

要知道一家网站建设公司靠不靠谱&#xff0c;看他们合作过哪些公司就能知道个大概。 如果服务对象有各行业的头肩部企业&#xff0c;那这家网站建设公司在专业性上肯定是有保障的。 但是&#xff0c;靠谱并不意味着适合自己。 靠谱的网站建设公司其实在技术上都大差不差&…

我用这四款翻译工具,轻松搞定英文在线翻译

作为一名喜欢搜罗各种办公软件的打工人&#xff0c;今天我要和大家聊聊一个我们工作中不可或缺的技能——英文翻译。首先&#xff0c;我们得承认&#xff0c;翻译工作有时候真的很让人头疼&#xff0c;尤其是当我们面对一堆专业术语和长篇大论时。但自从我发现了这些翻译神器&a…