当前位置: 首页 > 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/...

蒙特卡洛方法与科学计算十大经典算法解析

1. 蒙特卡洛方法:从赌场到科学计算的跨界革命 1946年,三位天才科学家在洛斯阿拉莫斯实验室的咖啡时间里,可能不会想到他们正在创造一种将彻底改变科学计算的方法。蒙特卡洛方法的名字来源于摩纳哥著名的赌城,这暗示了其核心思想—…...

AI 编程 Harness 框架深度拆解(非常详细),6 大框架从入门到精通,收藏这一篇就够了!

AI 会写,不等于 AI 能稳定交付。 前段时间我们都在说 Vibe Coding,大家都知道是氛围编程的意思,但是现在也有叫“直觉编程”。什么叫直觉编程,就是完全不用管其它的,想到什么就做什么,主打一个靠直觉写代码…...

OpenMMLab 环境配置实战:从 YOLO 项目报错到模块化开发的避坑指南

1. 从YOLO项目报错说起:OpenMMLab环境配置的典型痛点 最近在复现一个基于YOLOv5改进的OpenMMLab项目时,遇到了让人头疼的ModuleNotFoundError: No module named mmdet报错。这个场景太典型了——明明项目目录里清清楚楚躺着mmdet文件夹,Pytho…...

基于注意力机制的多尺度卷积神经网络在滚动轴承故障诊断中的应用

基于注意力的多尺度卷积神经网络轴承故障诊断 针对传统方法在噪声环境下诊断精度低的问题,提出了一种多尺度卷积神经网络的滚动轴承故障诊断方法 首先,构建多尺度卷积提取不同尺度的故障特征,同时引入通道注意力自适应地选择包含故障特征的通…...

YimMenu创新安全框架:GTA5游戏增强与防护指南

YimMenu创新安全框架:GTA5游戏增强与防护指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

3步精通UndertaleModTool:解锁GameMaker游戏修改全流程

3步精通UndertaleModTool:解锁GameMaker游戏修改全流程 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleModT…...

轨道角动量OAM超表面与自旋-轨道角动量耦合结构设计的FDTD仿真案例

轨道角动量 OAM 超表面 自旋-轨道角动量耦合结构设计 fdtd仿真 复现2017 OE:Spin-to-orbital angular momentum conversion in dieletric metasurface 介绍:自旋-轨道角动量转换超表面,入射自旋角动量光束,即左右旋圆偏振光时&…...

从电桥到差分放大:三线制PT100测温电路的设计实践与精度考量

1. 三线制PT100测温电路的设计背景 温度测量在工业自动化、医疗设备、环境监测等领域都是基础且关键的技术需求。PT100作为一种广泛使用的铂电阻温度传感器,凭借其优异的线性度和稳定性,成为高精度测温的首选之一。但在实际应用中,如何准确测…...

数字游民装备:OpenClaw+Qwen3-32B的轻量化旅行方案

数字游民装备:OpenClawQwen3-32B的轻量化旅行方案 1. 为什么数字游民需要本地AI助手 去年在巴厘岛旅居时,我深刻体会到数字游民的工作痛点:不稳定的网络、时区差异导致的协作延迟、以及移动办公场景下的效率损耗。当你在咖啡馆处理文件时&a…...

Comsol仿真:三相电力变压器电磁场与电路耦合计算,精确预测高低压绕组电压电流分布及磁通密度分布

comsol三相电力变压器电磁场和电路耦合计算,可以得到变压器高低压绕组电压电流分布以及变压器磁通密度分布,今天我们来聊聊如何在COMSOL中模拟三相电力变压器的电磁场和电路耦合计算。通过这个模拟,我们可以得到变压器高低压绕组的电压电流分…...