ES(ElasticSearch)倒排索引

目录

 正排与倒排索引

1.正排索引

作用:

优点:

缺点:

2.倒排索引

原理:

 倒排索引的构建流程:

 倒排索引的搜索流程:

优点:

缺点:

3. 应用场景

倒排索引中有几个非常重要的概念:

  1. 词条(term):索引里面最小的存储和查询单元,对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。
  2. 词汇表(Vocabulary) :这是一个包含所有不重复词汇的列表,每个词汇都有一个唯一的词汇ID。
  3. 倒排列表(Inverted List) :对于每个词汇,倒排列表记录了包含该词汇的文档ID或文档的位置信息。这使得搜索引擎可以快速地找到包含特定词汇的文档。
  4. 文档( Document ):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

 正排与倒排索引

1.正排索引

正排索引(forward index)是信息检索和数据库系统中常用的一种数据结构,用于按顺序存储和访问文档或记录的详细信息。正排索引将每个文档的内容和其他相关信息按照一定的顺序和格式存储在一个连续的数据结构中,以便于后续的检索和访问。

图例:

作用:

如果是根据id查询,那么直接走索引,查询速度非常快,通常用于支持倒排索引(inverted index)的建立和查询。

优点:

可以给多个字段创建索引 根据索引字段搜索、排序速度非常快

缺点:

1. 存储需求大:正排索引存储了每个文档的详细信息,包括内容和元数据。对于大规模文档集合,需要大量的存储空间来维护这些信息。

2. 访问效率低:正排索引通常是顺序存储的,要求对整个索引进行扫描或者按顺序访问来获取特定文档的详细信息。在需要随机访问或者大规模并发访问时,可能会导致访问效率不高,特别是当数据量巨大时,内存或磁盘访问延迟可能成为瓶颈。

3.不适合全文搜索:正排索引虽然包含文档内容,但不像倒排索引那样针对文本内容建立反向索引以支持全文搜索。因此,在需要快速全文搜索和相关性排序的场景下,倒排索引通常更为适用。

2.倒排索引

倒排索引(inverted index),用于快速查找包含特定单词的文档或文档集合。与正排索引不同,倒排索引以单词或者词项作为索引的关键,并记录包含这些单词的文档位置或标识符。倒排索引主要用于支持文本搜索引擎等应用,能够快速定位到包含用户查询单词的文档。

图例:

原理:

倒排索引是一种反向索引结构,它将文档中的每个词汇映射到它出现的文档或文档的位置。它包括两个主要部分:

  1. 词汇表(Vocabulary) :这是一个包含所有不重复词汇的列表,每个词汇都有一个唯一的词汇ID。
  2. 倒排列表(Inverted List) :对于每个词汇,倒排列表记录了包含该词汇的文档ID或文档的位置信息。这使得搜索引擎可以快速地找到包含特定词汇的文档。
 倒排索引的构建流程:
  1. 文本预处理:将文档内容分解成单独的词汇或短语,将词汇统一为基本形式,去除常见但无实际检索价值的词。
  2. 建立词汇表:创建一个包含所有独特词汇的列表,并为每个词汇创建一个倒排列表。
  3. 构建倒排列表:对于每个词汇,记录所有包含该词汇的文档的标识符(如文档ID)。这些记录通常会存储在一个列表或数组中。
  4. 索引优化:对索引表进行压缩,以减少存储空间和提高访问效率,根据索引大小和访问模式,优化索引的内存缓存和磁盘读写策略,以提高性能。
 倒排索引的搜索流程:
  1.  用户输入一个词语,系统首先对查询进行预处理,包括分词、词干提取等,以便与倒排索引中的词项进行匹配。
  2. 系统根据预处理后的查询词项,在倒排索引中查找每个词项对应的文档列表。
  3. 如果查询中有多个词项,系统将合并这些词项的倒排列表,找出它们的交集或并集,得到包含所有查询词项的文档集合。
  4. 根据每个文档在倒排列表中的相关性得分(如文档频率、位置信息等),对搜索结果进行排序。

搜索流程举例:

 

优点:

根据词条搜索、模糊搜索时,速度非常快

缺点:

只能给词条创建索引,而不是字段无法根据字段做排序(此处所指的字段是json中的字段)

3. 应用场景

在实际应用中,正排索引和倒排索引往往是结合使用的。例如,在数据库系统中,正排索引用于快速访问数据记录,而倒排索引用于实现高效的文本搜索。在搜索引擎中,倒排索引用于处理用户的搜索查询,快速返回相关结果,而正排索引则用于获取结果中文档的详细信息。

总结来说,正排索引和倒排索引各有特点,它们在不同的场景下发挥着重要的作用。正排索引适合于基于唯一标识符的数据检索,而倒排索引则更适合于全文搜索和关键词检索。

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

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

相关文章

【二叉树的锯齿形层序遍历】python刷题记录

R2-树与二叉树篇 层序遍历双端队列deque # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def zigzagLevelOr…

【读代码】高斯掩模

目录 问题: 主要功能: 问题: 看不懂实现的功能 主要功能: 从输出张量中提取与边界框对应的区域,并计算该区域与高斯核之间的均方误差(MSE)损失 例子 假设我们有以下输入: boxe…

我的创作纪念日(一)——Giser?Noder?不如“Computer”

目录 Giser?Noder?不如“Computer” 一、根源:保持学习习惯的刚需 二、机缘:processOn的另类替代 三、日常:对技术栈丰富的思考 四、成就:保持心态健康的活着 五、憧憬:能一直心态健康的活…

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库, 主要想优化两个方面, 上篇提到的: 针对 3&…

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效 大家好,今天介绍一个在网上很常见的模拟水波波动要灌满按钮的动画效果,效果下面图所示。 本例图片 案例分析 我们沿着Z轴从上到下数一下一共有几个层: 文字层:白色文字阴影的黑色文字,当鼠标移动上来时候…

黑马点评--给店铺类型查询添加缓存

controller/ShopTypeController.java /*** 店铺分类查询,用于展示首页头部店铺分类* return*/GetMapping("list")public Result queryTypeList() {return typeService.queryList();} service/IShopTypeService.java Result queryList(); service/impl/S…

fatal: Could not read from remote repository. 解决方法

问题描述: Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法: 当在网上尝试大量方法仍然失败的时候,不妨试试这个方法。 在 github 上&…

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection Deformable DETR: 基于稀疏空间采样的注意力机制,让DCN与Transformer一起玩! - 知乎 (zhihu.com) 【Deformable DETR 论文源码解读】Deformable Trans…

The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…

【error】AttributeError: module ‘cv2.dnn‘ has no attribute ‘DictValue‘(库冲突)

conda list conda remove opencv pip uninstall opencv-python conda list pip 同时卸载两个库 pip uninstall opencv-contrib-python opencv-python 没有and 直接写库名 module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法_module cv2.dnn has no attribute d…

Linux - 环境变量、程序地址空间、进程地址空间及Linux2.6内核进程调度队列

目录 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL 和环境变量相关的命令 环境变量的组织方式 通过代码获取环境变量 通过系统调用获取环境变量 程序地址空间 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活…

谈一谈爬虫开发工程师

爬虫就只是抓数据的吗?并不是,爬虫工程师的工作不再仅仅是抓取数据,还需要处理其他各种复杂问题,今天我们就来聊聊爬虫开发工程师。 一、 爬虫开发工程师工作内容 爬虫开发工程师是负责编写和维护网络爬虫程序的专业人员。他们的…

【多模态大模型】 ALBEF in NeurIPS 2021

一、引言 论文: Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 作者: Salesforce Research 代码: ALBEF 特点: 该方法使用ViT进行图像特征提取,提出将BERT分两部分&am…

Cocos Creator2D游戏开发(3)-飞机大战(1)-背景动起来

资源见: https://pan.baidu.com/s/1cryYNdBOry5A4YEEcLwhDQ?pwdzual 步骤 1, 让背景动起来 2, 玩家飞机显现,能操控,能发射子弹 3.敌机出现 4. 碰撞效果(子弹和敌机,敌机和玩家) 5. 积分和游戏结束 6. 游戏存档,对接微信小游戏,保存历史最高分 7. cocos发布到微信小游戏 资源…

探索Python的进度条神器:tqdm

文章目录 探索Python的进度条神器:tqdm一、背二、tqdm简介三、安装tqdm四、tqdm的五个简单使用示例五、tqdm在不同场景下的应用六、常见问题及解决方案七、总结 探索Python的进度条神器:tqdm 一、背 景:为什么选择tqdm? 在Python…

苦学Opencv的第十四天:人脸检测和人脸识别

Python OpenCV入门到精通学习日记:人脸检测和人脸识别 前言 经过了十三天的不懈努力,我们终于也是来到了人脸检测和人脸识别啦!相信大家也很激动吧。接下来我们开始吧! 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识…

Spring 常用的三种拦截器详解

前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序&am…

spring —— 事务管理器

事务管理主要针对数据源进行操作:在数据库方面,通过 TransactionManager 事务管理器进行管理,表明一旦出现错误,该数据源的所有数据全部复原。那么数据库如何判断是否发生了错误呢?这就需要在代码方面,通过…

抖音直播弹幕数据逆向:websocket和JS注入

🔍 思路与步骤详解 🕵️‍♂️ 思路介绍 首先,我们通过抓包工具进入的直播间,捕获其网络通信数据,重点关注WebSocket连接。发现直播弹幕数据通过WebSocket传输,这种方式比传统的HTTP更适合实时数据的传输。…