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,一经查实,立即删除!

相关文章

OpenCV库学习之cv2.magnitude函数

OpenCV库学习之cv2.magnitude函数 一、简介 cv2.magnitude是OpenCV库中的一个函数,用于计算两个相同尺寸的单通道数组的逐元素乘积的欧几里得范数。在图像处理中,这个函数通常用来结合两个方向上的梯度图像(例如,通过Sobel算子得…

快速了解jQuery

jQuery是一个快速、简洁且功能强大的JavaScript库,旨在简化HTML文档操作、事件处理、动画设计和Ajax交互。 通过其“写得更少,做得更多”的核心宗旨,jQuery极大地减少了开发者的代码编写工作量。 以下将从几个方面介绍jQuery: 1.…

【二叉树的锯齿形层序遍历】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…

Spring容器启动时执行代码(数据预热)

文章目录 静态代码块PostConstructInitialzingBeanCommandLineRunner和ApplicationRunnerServletContextListener执行顺序 在Java项目中,有时我们需要在应用启动时执行一些初始化代码,比如加载配置、初始化数据库连接池、预热数据等。这些操作对于应用的…

我的创作纪念日(一)——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 上&…

java手动编译和运行程序

java手动编译和运行程序 1、无package无依赖jar public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");} }$ javac HelloWorld.java $ java -classpath . HelloWorld # 或者 $ java -cp . HelloWorld2、有packag…

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

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

深度学习在智慧交通中的应用:行人车辆检测与计数系统详解

引言 在现代城市中,行人和车辆的检测与计数对交通管理和城市规划具有重要意义。通过使用深度学习技术,可以实现对行人和车辆的实时检测与计数,提高交通管理的效率。本文将详细介绍如何构建一个基于深度学习的行人车辆检测与计数系统&#xf…

论文阅读: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 优先级 活…

谈一谈爬虫开发工程师

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

Springboot与SpringSecurity使用(2):授权、自定义异常处理

一、用户授权 在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。判断当前用户是否拥有访问当前资源所需的权限。Sp…