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

Es之正排索引与倒排索引

文章目录

    • 概要
    • 一、正排索引
    • 二、倒排索引
    • 三、Q&A
    • 四、参考

概要

很早就研究了Es倒排索引的具体实现,但对倒排索引和正派索引的定义不是那么清晰,本文就是简述本人对二者的理解。
正排索引和倒排索引的概念来源于

正排索引是文档(ID)到关键词的映射(已知文档找关键词),倒排索引是关键词到文档(ID)的映射(已知关键词找文档)。
注意这里的文档是指文档ID,而非文档本身,但通过文档ID可以找到文档的数据实体,
这里的文档ID并非必须是MySQL中的主键,Es中的Doc Id,MongoDB的ObjectId,而是任何可以定位到文档的唯一特定词。

ps:明确我们这里讨论的文档是文档包含多个字段,字段对应具体值的结构,比如MySQL、Es、MongoDb等都是这种层级结构,很多博文说文档映射关键词,就是本文中字段的具体值到所包含关键词的映射过程。

一、正排索引

正排索引(forward index),也叫attribute or profile index,是通过对doc某特定字段(正排字段)的具体值建立索引,在将具体值分词后,得到不少于1个的关键词,索引中记录了这些关键词内容、位置、次数等信息。常用来进行过滤,统计,排序或算分使用。

正排索引中“正"指的是从doc field—>doc field keys的映射过程 ,其优点是结构简单、建立方便,适用于文档量较小的情况。对于大规模的文档集,正排索引的检索效率较低,因为需要扫描所有文档以找到包含特定关键字的文档。

假设有一系列文档,文档中有若干字段,其中以name字段建立正排索引形式如下:

name字段值关键词信息文档(ID)
my is tom,hello tommy,is, tom, hello1
you are tomyou,are,tom2
my is bob,he is johnmy,is,bob,he,john3

当然了组织索引的具体数据结构暂不讨论,可以B+Tree、HashMap、SkipList等等。
但是我们可以通过正排索引快速的定位某个文档是否包含特定关键词,以及关键词次数、位置等信息。

显而易见,正排索引更符合人类整理信息的习惯,构建简单,但查找效率低下,一般数据检索采用倒排索引,除非在特定情况下,否则正排索引实用性价值不大。

二、倒排索引

倒排索引(inverted index)是通过对doc某特定字段的具体值进行分词后,得到不少于1个的关键词,根据这些关键词建立索引,索引中记录了关键词所对应文档的ID、位置、次数等信息。

倒排索引中的"倒"指的是从doc field keys->doc id的映射过程。由于每个关键词对应的文档在动态变化,所以倒排索引的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字对应的所有文档,所以效率很高。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些(比如Es文档插入后默认1s后才能搜到),但不会影响整个搜索引擎的效率。

关键词信息文档(ID)
my1,3
is1,2,3
tom1,2
hello1
you2
are2
bob3
he3
john3

在实际应用中,通常会将正排索引和倒排索引结合起来使用。首先使用倒排排索引对文档集进行初筛,找到包含查询关键字的文档;然后使用正排索引对文档进行排序等操作。

三、Q&A

  1. MySQL的 B+Tree索引是正排索引还是倒排索引?

首先声明本人观点,MySQL的 B+Tree索引既不符合正排索引定义也不符合倒排索引定义,没必要非要将其关联起来,不管是正排,倒排,还是B+Tree,都是提高查询效率的方法。非要关联的话,B+Tree索引具有正排和倒排的某些特性,聚簇索引偏向正排索引,非聚簇索引偏向倒排索引,聚簇索引通过主键组织文档数据,非聚簇索引是辅助提升查询效率的手段。主键类似文档ID,非聚簇索引字段值类似关键词。

  1. 正排索引有应用吗?

在Es中就有正排索引,被称为Doc Values,其将文档中每个字段的值采用列式结构存储,通常存储在磁盘中,查询是会被加载到内存中。主要用于存储和检索字段原始值,以便进行快速的聚合、排序和脚本操作,特别适用于数值、日期、布尔和不分词字符串的字段。

四、参考

1]:Lucene 正排索引、倒排索引
2]:ES倒排索引、正排索引
3]:Difference between Inverted Index and Forward Index
4]:Forward index
5]:Indexing for Beginners
6]:elasticsearch实战-doc values列式存储算法
7]:Es doc values正排索引

相关文章:

Es之正排索引与倒排索引

文章目录 概要一、正排索引二、倒排索引三、Q&A四、参考 概要 很早就研究了Es倒排索引的具体实现,但对倒排索引和正派索引的定义不是那么清晰,本文就是简述本人对二者的理解。 正排索引和倒排索引的概念来源于 正排索引是文档(ID)到关键词的映射&am…...

wordpress将图片默认连接到媒体文件

wordpress上传图片后,图片链接可以选择链接到媒体文件或附件页面。如果选择链接到媒体文件,就是链接到了图片的地址了。如果选择链接到附件页面,就是链接到图片所在的attachment页面了。 具体链接到哪里,在wordpress模板制作时&a…...

Java学习笔记 | Java基础语法 | 03 | 流程控制语句

文章目录 0 前言1.流程控制语句1.1 流程控制语句分类1.2 顺序结构 2.判断语句2.1 if语句1. if语句格式1练习1:老丈人选女婿练习2:考试奖励 2. if语句格式2练习1:吃饭练习2:影院选座 3. if语句格式3练习1:考试奖励 2.2 …...

记录新人的web3之旅

简单记录一下自己奇妙又充满热情的web3之旅,希望能勉励未来的自己 2023.10.25—— 第一次觉得对web3,币圈感到好奇是我在油管看了《隐藏的币圈亿万富翁》。这个简短的纪录片讲了郑皓升的传奇A9人生,从币圈中致富,再到被制裁,被软…...

由浅到深认识Java语言(9):Eclipse IDE简介

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...

游戏引擎中的地形系统

一、地形的几何 1.1 高度图 记录不同定点的高度,对每个网格/顶点应用高度、材质等信息,我们每个顶点可以根据高度改变位移 但是这种方法是不适用于开放世界的。很难直接画出几百万公里的场景 1.2 自适应网格细分 当fov越来越窄的时候,网格…...

【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)

OTA最优传输 🚀🚀🚀摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 🎓 Fixed Label Assignment--静态标签分配2.2 ✨Dynamic Label Assignment--动态标签分配 三、3️⃣Method---论文方法3.1 &#x1f39…...

无极低码SQL模板引擎使用教程示例,自己手撸一个sql模板引擎进行动态sql生成。

无极低码 :https://wheart.cn 无极低码SQL模板使用教程 一、模板结构与规则 无极低码SQL模板通过简洁的Markdown格式,使SQL语句具有更强的灵活性和适应性,简化了根据业务需求定制SQL的过程。 无极低码SQL模板是一种基于Markdown格式的特殊…...

Python学习(一)

Python环境下载安装 安装略 验证安装结果与编写第一个Python程序...

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用

目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…...

运动想象 (MI) 迁移学习系列 (14) : EEGNet-Fine tuning

运动想象迁移学习系列:EEGNet-Fine tuning 0. 引言1. 主要贡献2. 提出的方法2.1 EEGNet框架2.2 微调 3. 实验结果3.1 各模型整体分类结果3.2 算法复杂度比较3.3 不同微调方法比较 4. 总结欢迎来稿 论文地址:https://www.nature.com/articles/s41598-021-99114-1#cit…...

java中获取字符串中满足正则表达式的元素集合

目录 1.说明 2.从"as1285dfSWE45"中提取单个小写字母 3.从"aHs12DF85dfSWE45"中提取连续大写字母 4.从"[1024]*100-52[587] [24$]"中提取[]中的数字 5.总结 1.说明 在开发中有时需要从字符串中提取特定的字符,如下:…...

HTTPS总结

密码学基础 在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识。 明文: 明文指的是未被加密过的原始数据。 密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密&#xf…...

Linux之基础IO

1.C语言中的文件操作函数 文件的打开 path为文件路径,mode为打开方式,它们都是字符串。 代码演示: 此时,当前目录中并没有log.txt文件,但是没关系,fopen会在当前路径下创建log.txt文件。 简单来说&#xf…...

【SpringSecurity】十六、OAuth2.0授权服务器、资源服务器的配置(理论部分)

文章目录 0、OAuth2服务端结构1、授权服务配置2、授权服务器 ⇒ 配置客户端详情3、授权服务器 ⇒ 管理令牌配置4、授权服务器:配置端点访问的安全约束5、资源服务器配置 相关📕: 【OAuth2授权服务器配置完整Demo】 0、OAuth2服务端结构 OAu…...

AtCoder Beginner Contest 346

D - Gomamayo Sequence 状态DP 题意:给定一个长度为n的01字符串,使得只存在一组s[i]s[i1] 其余都是不同的,若使0改变为1 会花相应的费用 a[i] 求最小值 思路:数据为2e5数据太大,贪心不可以想到dp--状态dp 构造01串…...

Arduino智能家居

文章目录 一、接线框图1、下载fritzing 二、Arduino IDE 下载三、实现代码 一、接线框图 1、下载fritzing https://github.com/fritzing/fritzing-app/releases打开的软件界面如下: 二、Arduino IDE 下载 官网地址 P.S. 如果upload代码过程中出现cant open de…...

吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式

问题预览 模型的参数(w和b)有什么作用?不同的w和b对线性回归模型有什么影响?训练集里的y和线性回归模型预测的y(y帽)的区别是什么?成本函数的作用是什么?成本函数的公式是什么&…...

Day56-LNMP架构扩展为集群模式实战精讲

Day56-LNMP架构扩展为集群模式实战精讲 1. 企业级标准部署知乎产品wecenter1.1 部署知乎软件Wecenter 2. 企业级迁移数据库到独立服务器2.1 为什么要进行数据库的拆分2.2 数据库拆分架构演变过程,如下图所示2.3 数据库拆分环境规划2.4 数据库拆分架构详细步骤2.4 we…...

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

OpenClaw飞书机器人配置:Phi-3-mini-128k-instruct对话式任务触发

OpenClaw飞书机器人配置:Phi-3-mini-128k-instruct对话式任务触发 1. 为什么选择飞书OpenClawPhi-3的组合? 去年团队规模扩张到15人时,我突然发现每天要花2小时处理各种琐碎请求:"下周会议材料准备好了吗?"…...

CWW Morse Transmit:嵌入式摩尔斯电码生成与侧音实现

1. CWW Morse Transmit 库深度解析:嵌入式系统中的摩尔斯电码生成与音频侧音实现摩尔斯电码(Morse Code)作为人类历史上首个成熟的数字通信协议,自1837年塞缪尔莫尔斯发明以来,持续在军事、航海、业余无线电及应急通信…...

MATLAB六自由度齿轮弯扭耦合动力学代码(含时变啮合刚度、齿侧间隙及集中质量法建模的数值计算分析)

MATLAB六自由度齿轮弯扭耦合动力学代码(考虑时变啮合刚度、齿侧间隙),根据集中质量法建模(含数学方程建立和公式推导)并在MATLAB中采用ODE45进行数值计算。 输出齿轮水平和竖直方向的振动位移、振动速度、振动加速度、…...

别再只调参了!深入torchvision.datasets.CIFAR10源码,理解PyTorch数据加载的设计哲学

深入torchvision.datasets.CIFAR10源码:解码PyTorch数据加载的工程美学 当你第一次在PyTorch中写下torchvision.datasets.CIFAR10(root./data)这行代码时,是否想过这简单的调用背后隐藏着怎样的设计智慧?对于已经能够熟练调用各种数据集接口的…...

AI率80%+送去降AI工具处理,3款结果对比

这篇文章记录的是一个横向测试:找了几篇AI率都在80%以上的论文,分别送去嘎嘎降AI、比话降AI、率零处理,然后统一在知网检测,看最终结果。 测试设计 测试论文(4篇): 编号专业字数知网AI率&…...

智能应急灯V16:多场景照明解决方案

目录 一、方案概述 二、硬件方案设计 2.1 硬件整体架构 2.2 核心模块选型与设计 2.2.1 主控模块(核心单元) 2.2.2 电源管理模块(供电核心) 2.2.3 照明驱动模块 2.2.4 状态监测模块 2.2.5 通信模块(可选&#…...

weixin283基于微信小程序校园订餐的设计与开发+ssm(文档+源码)_kaic

第5章 系统实现 5.1用户登录功能的界面实现 本系统中可以保证安全的功能就是用户登录功能,登录可以验证用户的身份,用户可以注册,当密码忘记后也可以通过忘记密码功能进行找回。在用户登录界面里采用上中下的方式进行设计。在上设计的是功能…...

OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变

OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 传统黑苹果配置需…...

个人信息保护:使用AI工具必须知道的隐私安全指南

个人信息保护的重要性AI工具的普及带来了便利,但也存在隐私泄露风险。未经保护的个人信息可能被滥用,导致身份盗窃、诈骗等问题。了解隐私安全措施至关重要。选择可信的AI工具优先选择有明确隐私政策、数据加密措施的工具。查看工具是否通过第三方安全认…...

电动汽车电动真空助力制动系统模型:一场制动系统的静默革命

电动真空泵,真空助力器,助力制动 Simulink伺服制动模型 Simulink电动助力制动模型 电动汽车电动真空助力制动系统模型基于MATLAB/Simulink搭建电动汽车电动真空助力系统,包括真空助力器模型,电动真空泵模型,系统最小真…...