ElasticSearch - 理解doc Values与Inverted Index倒排索引

news2024/12/17 0:54:11

文章目录

  • 概述
  • 倒排索引:从图书馆的索引卡片谈起
    • 倒排索引的工作原理
  • docValues:从数据库的列式存储说起
    • docValues的工作原理
  • docValues与倒排索引的对比
    • 两者的联系:组合使用,优化搜索与分析
  • 小结

在这里插入图片描述


概述

在使用 Elasticsearch 进行大规模搜索和数据分析时,doc_values倒排索引 是两个非常重要但又截然不同的概念。

它们都在不同的场景下发挥着关键作用,因此理解它们的区别和联系,对于优化搜索和分析性能至关重要。

在这里插入图片描述


倒排索引:从图书馆的索引卡片谈起

想象一下,你走进一个图书馆,想找一本书。每本书都有不同的内容,但你只关心其中的一些特定关键词。为了让你快速找到所有包含这些关键词的书籍,图书馆的工作人员制作了一个索引卡片系统:

  1. 每个卡片上写着一个关键词(例如:“Elasticsearch”,“数据库”,“搜索引擎”等)。
  2. 索引卡片上列出了所有包含该关键词的书籍编号。

通过这个系统,你不需要翻遍所有的书籍,只要查看每个关键词对应的卡片,就能快速找到包含该关键词的书籍。这种快速查找的方式,就是 倒排索引

倒排索引的工作原理

倒排索引是 Elasticsearch 的核心数据结构之一,专门为文本搜索优化。在倒排索引中,每个词项(Term)都会被映射到一个包含该词项的文档列表,实现了基于内容的快速查找。

例如:

  • 对于关键词 “Elasticsearch”,倒排索引记录了所有包含 “Elasticsearch” 词语的文档。
  • 当用户搜索某个词(如 “Elasticsearch”)时,系统可以直接根据倒排索引找到所有包含该词的文档,而不必扫描整个数据集。

倒排索引特别适合处理文本数据,尤其是支持全文搜索、词频分析等操作。


docValues:从数据库的列式存储说起

想象你正在处理一张数据库表格,表格中有若干列,每列存储不同类型的数据,比如日期、数字、文本等。假设你要进行如下操作:

  • 按照某个数字字段(如订单金额)进行排序。
  • 按照某个时间字段(如订单日期)进行聚合(例如,统计某个月的销售总额)。

为了高效地执行这些操作,数据库通常会将字段数据按列存储,而不是按行存储。这种按列存储的方式称为 列式存储,而 Elasticsearch 中的 doc_values 就是采用了类似的列式存储方式。

docValues的工作原理

doc_values 是 Elasticsearch 为了优化排序、聚合和脚本计算而设计的存储结构。它将每个文档的字段值存储为列式数据,并且对字段的每个值进行排序,方便后续对这些字段进行高效操作。

举个例子,假设你有一个包含日期字段的文档集合。通过 doc_values,Elasticsearch 会将所有日期值按列存储,并提供优化的数据访问模式。这使得基于日期的排序和聚合操作变得非常高效。

docValues与倒排索引的对比

特性倒排索引docValues
存储方式按词项存储:每个词项指向包含它的文档按字段存储:将字段值按列存储,便于聚合和排序
优化目的优化全文搜索和词项匹配优化排序、聚合和脚本计算
适用场景主要用于文本数据,特别是用于支持快速查询和匹配主要用于数值型、日期、关键字等字段,优化排序和聚合
查询效率高效的全文搜索,快速找到包含特定词项的文档高效的排序和聚合操作,尤其是大数据量时

两者的联系:组合使用,优化搜索与分析

虽然 倒排索引doc_values 解决的是不同类型的问题,但它们可以结合使用,在 Elasticsearch 中发挥强大的性能。

  1. 全文搜索与高效聚合的结合:倒排索引适用于快速查找包含某个词项的文档,而 doc_values 则专门优化数值型字段(如时间、金额等)的排序和聚合操作。在实际应用中,倒排索引和 doc_values 可以共存,满足不同查询的需求。

    例如,你可以使用倒排索引来实现对产品描述的快速文本搜索,同时利用 doc_values 对销售金额进行高效聚合,计算某段时间内销售的总额。

  2. 实时与批量分析的平衡:倒排索引适合快速响应查询,而 doc_values 则使得批量处理(如聚合)更加高效。通过 doc_values,Elasticsearch 可以处理大量的数据并在较短时间内完成排序和聚合操作,适用于实时数据分析和报表生成。


小结

  • 倒排索引 就像是图书馆的索引卡片,专注于文本数据的快速查找。
  • doc_values 就像是数据库的列式存储,专注于数值、日期、关键字等字段的高效排序与聚合。

虽然它们各自有不同的用途,但在 Elasticsearch 中,二者往往是互补的,共同为快速搜索和高效分析提供支持。通过合理配置和使用这两种技术,可以显著提高系统的性能,满足不同场景下的需求。

在这里插入图片描述

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

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

相关文章

Python | 数据可视化中常见的4种标注及示例

在Python的数据可视化中,标注(Annotation)技术是一种非常有用的工具,它可以帮助用户更准确地解释图表中的数据和模式。在本文中,将带您了解使用Python实现数据可视化时应该了解的4种标注。 常见的标注方式 文本标注箭…

【原生js案例】如何实现一个穿透字体颜色的导航

普通的导航大家都会做,像这种穿透字体的导航应该很少见吧。高亮不是通过单独设置一个active类来设置字体高亮颜色,鼠标滑过导航项,字体可以部分是黑色,不分是白色,这种效果的实现 感兴趣的可以关注下我的系列课程【we…

前端中图标的使用

1 antd 使用inconfont.cn中的图标 <template><div class"icons-list"><icon-font type"icon-tuichu" /><icon-font type"icon-facebook" /><icon-font type"icon-twitter" /></div> </templ…

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…

医学分割数据集B超图片肝脏分割数据集labelme格式271张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;271 标注数量(json文件个数)&#xff1a;271 标注类别数&#xff1a;1 标注类别名称:["liver"] 每个类别标注的框数&#xf…

【目标检查】YOLO系列之:Triton 推理服务器Ultralytics YOLO11

Triton 推理服务器 1、引言2、Triton服务器2.1 什么是Triton Inference Server2.2 将YOLO11 导出为ONNX 格式2.3 设置Triton 模型库2.3.1 创建目录结构2.3.2 将导出的ONNX 模型移至Triton 资源库 2.4 运行Triton 推断服务器2.4.1 使用 Docker 运行Triton Inference Server2.4.2…

论文学习——多种变化环境下基于多种群进化的动态约束多目标优化

论文题目&#xff1a;Multipopulation Evolution-Based Dynamic Constrained Multiobjective Optimization Under Diverse Changing Environments 多种变化环境下基于多种群进化的动态约束多目标优化&#xff08;Qingda Chen , Member, IEEE, Jinliang Ding , Senior Member, …

【C++】判断能否被 3, 5, 7 整除问题解析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;老师代码实现与分析老师代码逻辑分析优点缺点 &#x1f4af;学生代码实现与分析学生代码逻辑分析优点缺点 &#x1f4af;改进与优化优化代码实现优化…

【构建工具】现代开发的重要角色

你可能有所听闻构建工具&#xff0c;但是不知道是干什么的&#xff0c;或者是开发中用到了&#xff0c;大概会使用&#xff0c;但是想理解一下具体的工作原理等&#xff0c;那么我将分享一下我对其的理解。【 我将分为两篇来讲解】。 当我们谈到构建工具时&#xff0c;可以把它…

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…

Unity集成Wwise并进行开发

1. 背景 项目要接入WWise&#xff0c;学习一下 1.1 与Unity自带音频系统的区别 Unity有自己的原生音乐功能&#xff1a;AduioSound。但是这个功能较为简单&#xff0c;对于音效开发人员来说并不是很友好。在一些大型的游戏中&#xff0c;音效会接入Wwise这个软件。音效开发者…

【AI知识】有监督学习之回归任务(附线性回归代码及可视化)

1. 回归的基本概念 在机器学习的有监督学习中&#xff0c;回归&#xff08;Regression&#xff09;是一种常见的任务&#xff0c;它的目标是通过观察数据来建立一个模型&#xff0c;用一个或多个自变量来预测因变量的值。 回归分析通常用于&#xff1a; a.预测&#xff0c;基于…

C语言专题之宏的基本概念

合理使用宏可以使我们的代码更加简单&#xff0c;接下来小编就来讲解宏的基本概念&#xff01; 一、宏的定义 宏定义是C/C语言中一项强大而灵活的特性&#xff0c;它允许程序员使用预处理器指令来创建简化的代码表示。这种机制不仅提高了代码的可读性和可维护性&#xff0c;还…

MySQL 复合查询(重点)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 MySQL 复合查询&#xff08;重点&#xff09; 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

WPF 控件

<div id"content_views" class"htmledit_views"><p id"main-toc"><strong>目录</strong></p> WPF基础控件 按钮控件&#xff1a; Button:按钮 RepeatButton:长按按钮 RadioButton:单选按钮 数据显示控件 Te…

Docker方式安装人人影视离线完整安装包

本文软件由网友 ルリデ 推荐&#xff1b; 上周&#xff0c;人人影视创始人宣布将人人影视二十年字幕数据开源分享 目前提供了两种使用方式&#xff1a; “在线应用” &#xff1a;意味着需要有互联网才可以使用。官方提供了网站&#xff1a;https://yyets.click “离线使用” …

opencv——(图像梯度处理、图像边缘化检测、图像轮廓查找和绘制、透视变换、举例轮廓的外接边界框)

一、图像梯度处理 1 图像边缘提取 cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) 功能&#xff1a;用于对图像进行卷积操作。卷积是图像处理中的一个基本操作&#xff0c;它通过一个称为卷积核&#xff08;或滤波器&#xff09;的小矩阵在图像上…

物联网安全-ARMv8-M Trustzone 实操

前言 本文针对ARMv8m架构M23/M33 MCU安全特性使用进行介绍,以nxp LPC55xx系列和STM32L5xx系列为例,为大家阐述如何使用Trustzone技术提高物联网设备安全性,适合有一定平台安全基础的物联网设备开发人员、安全方案开发人员。 背景 为了提升平台安全性,ARM推出了ARMv8m架构…

深入理解偏向锁、轻量级锁、重量级锁

一、对象结构和锁状态 synchronized关键字是java中的内置锁实现&#xff0c;内置锁实际上就是个任意对象&#xff0c;其内存结构如下图所示 其中&#xff0c;Mark Word字段在64位虚拟机下占64bit长度&#xff0c;其结构如下所示 可以看到Mark Word字段有个很重要的作用就是记录…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…