一文读懂倒排序索引涉及的核心概念

基础概念
相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。
正向索引和倒排序索引
在没有搜索引擎时,我们是直接输入一个网址,然后获取网站内容,这时我们的行为是:
document -> to -> words 通过文章,获取里面的单词,此谓正向索引,forward index.
有了搜索引擎后,我们的行为是:输入一个单词,找到含有这个单词或者和这个单词有关系的文章:word -> to -> documents 我们把这种索引叫做inverted index,直译过来叫做倒排序索引,也叫反向索引。
倒排序索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排序索引,可以根据单词快速获取包含这个单词的文档列表。倒排序索引主要由两个部分组成:“单词词典”和“倒排文件”
倒排序索引中重要的概念
文档(Document)
一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档
字段(Field)
可以理解成数据库行中的字段,一个Document会由一个或多个Field组成
文档编号(Document ID)
在搜索引擎内部,会将文档集合内每个文档赋予一个唯一的内部编号,以此编号来作为这个文档的唯一标识,这样方便内部处理,每个文档的内部编号即称之为“文档编号”,后文有时会用DocID来便捷地代表文档编号。
举个例子,文档和词条之间的关系如下图:

上图中每一行就是一个Document
字段值被分析之后,存储在倒排索引中,倒排索引存储的是分词(Term)和文档(Doc),它们之间的关系,简化版的倒排索引如下图:

上图中counter代表统计分词的次数
单词词典(Lexicon)
搜索引擎的索引单位通常是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。

为了更好的理解单词词典这个抽象概念,我们通过Elasticsearch来进行举例,ES 为了能快速找到某个 Term,先将所有的 Term 排个序,然后根据二分法查找 Term,时间复杂度为 O(log n);,就像通过字典查找一样,这就是 Term Dictionary。如果 Term 太多,Term Dictionary 也会很大,放内存不现实,于是有了 Term Index。就像字典里的索引页一样,S开头的有哪些 Term,分别在哪页,可以理解 Term Index是一棵树,这棵树不会包含所有的 Term,它包含的是 Term 的一些前缀,通过 Term Index 可以快速地定位到 Term Dictionary 的某个 Offset,然后从这个位置再往后顺序查找。
在内存中用 FST 方式压缩 Term Index,FST 以字节的方式存储所有的 Term,这种压缩方式可以有效的缩减存储空间,使得 Term Index 足以放进内存,但这种方式也会导致查找时需要更多的 CPU 资源。对于存储在磁盘上的倒排表同样也采用了压缩技术减少存储所占用的空间。
分词(Analysis)
将文本切分为一系列单词的过程
例如文本:谷歌地图之父跳槽FaceBook
分词结果:谷歌\ 地图\之父\跳槽\FaceBook
倒排列表(PostingList)
倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。实际的倒排列表中并不只是存了文档ID这么简单,还有一些其它的信息,比如:词频(Term出现的次数)、偏移量(offset)等,如下图所示:

单词ID、单词和文档频率就不多说了,这里重点解释一下倒排列表:
DocID:单词出现的文档id
TF:单词在某个文档中出现的次数
POS:单词在文档中出现的位置
以单词“加盟”为例,其单词编号为6,文档频率为3,代表整个文档集合中有三个文档包含这个单词,对应的倒排列表为{(2;1;<4>),(3;1;<7>),(5;1;<5>)},含义是在文档2,3,5出现过这个单词,在每个文档的出现过1次,单词“加盟”在第一个文档的POS是4,即文档的第四个单词是“加盟”,其他的类似。
倒排文件(Inverted File)
所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。
词典、单词、倒排文件和倒排列表概念之间的关系
一张图就能很好的说明这些概念的关系

相关文章:
一文读懂倒排序索引涉及的核心概念
基础概念相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引&…...
Java基础算法题
以创作之名致敬节日 胜固欣然,败亦可喜。 --苏轼 目录 练习1 : 优化代码 扩展 : CRTL Alt M 自动抽取方法 练习2: 方法一: 方法二: 方法三: Math : 顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态方法来便于我们实…...
「SAP ABAP」你真的了解OPEN SQL的DML语句吗 (附超详细案例讲解)
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…...
数据结构3——线性表2:线性表的顺序结构
顺序结构的基本理解 定义: 把逻辑上相邻的数据元素存储在物理上相邻(占用一片连续的存储单元,中间不能空出来)的存储单元的存储结构 存储位置计算: LOC(a(i1))LOC(a(i))lLOC(a(i1))LOC(a(i))l LOC(a(i1))LOC(a(i))l L…...
VMware虚拟机搭建环境通用方法
目录一、前期准备1.下载并安装一个虚拟机软件二、开始创建虚拟机1.配置虚拟机硬件相关操作2.虚拟机网络相关操作三、开机配置相关内容0.开机遇到报错处理(选看--开机没有报错请忽略)1.开始配置2.开机之后配置3.使用xshell远程登录4.使用xshell配置虚拟机…...
2.Fully Convolutional Networks for Semantic Segmentation论文记录
欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录1.基础介绍2.分类网络转换成全卷积分割网络3.转置卷积进行上采样4.特征融合5.一个pytorch源码实现参考资料1.基础介绍 论文:Fully Convolutional Networks for Semantic Segmentati…...
深度解析Spring Boot自动装配原理
废话不多说了,直接来看源码。源码解析SpringBootApplication我们在使用idea创建好Spring Boot项目时,会发现在启动类上添加了SpringBootApplication注解,这个注解就是Spring Boot的核心所在。点击注解可以查看到到它的实现ementType.TYPE) Re…...
Linux:环境变量
目录一、环境变量的理解(1)什么是环境变量?(2)Linux中的环境变量二、环境变量的使用(1)PATH环境变量(2)和变量相关的指令三、环境变量与普通变量的区别在平时使用电脑的时…...
Codeforces Round 703 (Div. 2)(A~D)
A. Shifting Stacks给出一个数组,每次可以将一个位置-1,右侧相邻位置1,判断是否可以经过若干次操作后使得数列严格递增。思路:对于每个位置,前缀和必须都大于该位置应该有的最少数字,即第一个位置最少是0&a…...
Django项目5——基于tensorflow serving部署深度模型——windows版本
1:安装docker for windows 可能需要安装WLS2,用于支持Linux系统,参照上面的教程安装 2:在Powershell下使用docker docker pull tensorflow/serving3:在Powershell下启动tensorflow serving docker run -p 8500:8500 …...
MySQL基础篇3
第一章 多表关系实战 1.1 实战1:省和市 方案1:多张表,一对多 方案2:一张表,自关联一对多 id1 name‘北京’ p_id null; id2 name‘昌平’ p_id1 id3 name‘大兴’ p_id1 id3 name‘上海’ p_idnull id4 name‘浦东’…...
携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新
随着新冠病毒疫情的缓解和控制,全球旅游业逐渐开始重新复苏。尤其在一些度假胜地,游客数量已经恢复到疫情前的水平。 携程作为全球领先的一站式旅行平台,旗下拥有携程旅行网、去哪儿网、Skyscanner 等品牌。携程旅行网向超过 9000 万会员提供…...
记一次Kafka warning排查过程
1、前因 在配合测试某个需求的时候,正好看到控制台打印了个报错,如下: 2023-03-06 17:05:58,565[325651ms][pool-28-thread-1][org.apache.kafka.common.utils.AppInfoParser][WARN] - Error registering AppInfo mbean javax.management.I…...
MySQL学习笔记(6.视图)
1. 视图作用 (1). 简化业务,将多个复杂条件,改为视图 (2). mysql对用户授权,只能控制表权限,通过视图可以控制用户字段权限。 (3). 可以避免基本表变更,影响业务。只需更改视图即可。 2. 视图(创建&…...
java多线程与线程池-01多线程知识复习
多线程知识复习 文章目录 多线程知识复习第1章 多线程基础1.1.2 线程与进程的关系1.2 多线程启动1.2.1 线程标识1.2.2 Thread与Runnable1.2.3 run()与start()1.2.4 Thread源码分析1.3 线程状态1.3.1 NEW状态1.3.2 RUNNABLE状态1.3.3 BLOCKED状态1.3.4 WAITING状态1…...
Typescript - 将命名空间A导入另一个命名空间B作为B的子命名空间,并全局暴露命名空间B
前言 最近相统一管理 ts 中的类型声明,这就需要将各模块下的命名空间整合到全局的命名空间下,牵涉到从别的文件中引入命名空间并作为子命名空间在全局命名空间中统一暴露。 将命名空间A导入另一个命名空间B作为B的子命名空间 文件说明 assets.ts 文件中…...
Windows下实现Linux内核的Python开发(WSL2+Conda+Pycharm)
许多软件可以通过Python交互,但没有开发Windows版本,这个时候装双系统或虚拟机都很不方便,可以采取WSL2CondaPycharm的策略来进行基于Linux内核的Python开发。启动WSL2,安装Linux内核教程:旧版 WSL 的手动安装步骤 | M…...
新闻发布网站分析及适用场景
在当今数字时代,发布新闻的渠道已经不再局限于传统媒体,越来越多的企业、组织和个人开始使用互联网平台发布新闻稿,以提升品牌知名度和影响力。本文将介绍一些可以发布新闻的网站,并分析其特点和适用场景。一、新闻稿发布平台1.新…...
云原生时代顶流消息中间件Apache Pulsar部署实操之Pulsar IO与Pulsar SQL
文章目录Pulsar IO (Connector连接器)基础定义安装Pulsar和内置连接器连接Pulsar到Cassandra安装cassandra集群配置Cassandra接收器创建Cassandra Sink验证Cassandra Sink结果删除Cassandra Sink连接Pulsar到PostgreSQL安装PostgreSQL集群配置JDBC接收器创建JDBC Sink验证JDBC …...
医疗工作者的AI助手:MedGemma在症状鉴别诊断中的实战应用
医疗工作者的AI助手:MedGemma在症状鉴别诊断中的实战应用 1. 医疗AI的新范式:透明化诊断推理 在繁忙的临床工作中,医生们常常面临这样的挑战:如何在有限时间内准确识别症状组合背后的病因?传统方法依赖个人经验记忆和…...
AI 大模型绘图日常使用教程|零门槛上手,快速出图不踩坑
摘要日常办公、学习中,我们经常需要各类图片 ——PPT 配图、工作流程图、活动海报、课件插画等,手动绘制耗时费力,专业设计软件又难上手。本文整合目前最实用、免费 / 低成本的 AI 绘图大模型,从工具选择、基础操作到进阶技巧&…...
春联生成模型C盘清理关联技巧:释放AI模型存储空间
春联生成模型C盘清理关联技巧:释放AI模型存储空间 你是不是也遇到过这种情况?兴致勃勃地部署了几个不同的春联生成模型,想试试哪个写对联更有文采。结果玩了一圈下来,发现C盘空间告急,系统都开始卡顿了。看着那满屏的…...
5分钟掌握Fara-7B:微软开源的高效电脑自动操作AI智能代理
5分钟掌握Fara-7B:微软开源的高效电脑自动操作AI智能代理 【免费下载链接】fara Fara-7B: An Efficient Agentic Model for Computer Use 项目地址: https://gitcode.com/gh_mirrors/fara/fara 想要让电脑自动完成重复性任务吗?厌倦了手动操作网页…...
如何用OpenClaw的cron定时任务功能,每天自动发送待办清单
要实现“每天自动发送待办清单”,你需要将 Cron 定时触发器、待办管理 Skills 和消息推送渠道三者打通。这里提供两套最实用的方案,推荐优先使用 CLI 命令方案,它更稳定且易于调试。🚀 方案一:CLI 命令配置ÿ…...
【Hi3519DV500】SD卡64G正常识别,16G和32G识别失败,报告警 mmc1: error -110 whilst initialising SD card
目录 环境 问题 定位和解决 设备树文件层次关系与覆盖原则 解决方案 方案一:修改环境变量(推荐) 方案二:修改设备树 方案三:修改硬件支持 环境 Hi3519DV500开发板 参考文档:鸿鸥派 HongOU PI V2.…...
实测Guohua Diffusion国风生成效果:荷塘锦鲤、竹林薄雾,画面太美了
实测Guohua Diffusion国风生成效果:荷塘锦鲤、竹林薄雾,画面太美了 1. 国风绘画工具初体验 当我第一次打开Guohua Diffusion时,就被它简洁的界面设计所吸引。整个工具没有任何冗余参数,只有几个核心选项:画幅选择、提…...
终极窗口置顶解决方案:如何用AlwaysOnTop告别窗口切换烦恼
终极窗口置顶解决方案:如何用AlwaysOnTop告别窗口切换烦恼 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否曾因频繁切换窗口而打断工作流?是否在多…...
ICM45686数据老飘?GD32F470的IIC时序调试与FreeRTOS延时函数那些坑
GD32F470与ICM45686通信稳定性优化实战:从时序调试到FreeRTOS延时陷阱 当惯性导航系统的数据出现飘移、丢包或完全无法读取时,多数开发者会首先怀疑传感器硬件问题。但在使用GD32F470与ICM45686构建的系统中,真正的"魔鬼"往往藏在…...
用快马平台十分钟搭建你的第一个zotero式文献管理web原型
今天想和大家分享一个超实用的开发经验:如何用InsCode(快马)平台快速搭建文献管理系统的web原型。作为一个经常需要整理论文的研究狗,zotero这类工具简直是刚需,但有时候我们想验证一些定制化功能的想法,从零开发又太耗时。下面我…...
