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

文章目录

  • 概述
  • 倒排索引:从图书馆的索引卡片谈起
    • 倒排索引的工作原理
  • 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.mzph.cn/bicheng/63806.shtml

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

相关文章

Acer宏碁Swift3笔记本S40-20,SF314-56G原厂Win10系统工厂模式安装包,带Recovery恢复还原

适用电脑型号:S40-20、SF314-56、SF314-56G(原装OEM预装系统) 链接:https://pan.baidu.com/s/1q77Br-hcmn9iJraGVVKQ7Q?pwdrw1r 提取码:rw1r Acer宏碁原装出厂windows10系统自带所有驱动、Office办公软件、出厂主题壁纸、系统属性专属联…

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

极验决策引擎如何凭借独特优势,弯道超车传统风控?

前言 市场上的规则决策引擎产品众多,但大多局限于IP、设备、账号等层面,提供的是现成的风控标签和规则。然而,真正的风控,需要的不仅仅是标签和规则。 极验的业务规则决策引擎与众不同,这款决策引擎以界面流程编排为…

windows如何使用ssh连接kali

声明: 昨天晚上看了小羽老师的直播课,心血来潮自己也想搞一下这个ssh,中途安装遇到了不少问题,电脑也是重启了好多次,遇到bug就重启也是解决bug的一种方法. 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型:即将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离…

路由器、二层交换机与三层交换机的区别与应用

路由器、二层交换机和三层交换机是常见的网络设备,常常协同工作。它们都可以转发数据,但在功能、工作层级以及应用场景上存在差异。 1. 工作层级 三者在OSI模型中的工作层级不同: 路由器: 工作在 网络层(第三层&#…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码(颜色可行修改) // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

SEC_ASA 第一天作业

拓扑: 实验需求: 注意:在开始作业之前必须先读“前言”,以免踩坑!!!(☞敢点我试试) 按照拓扑图配置VLAN连接。 注意:ASA防火墙的 Gi0/1口需要起子接口&#x…

「Mac玩转仓颉内测版45」小学奥数篇8 - 排列组合计算

本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。 关键词 小学奥数Python Cangjie排列与组合 一、题目描述 编写一个程序,计算从 n 个不同元素中取…

Ungoogled Chromium127编译指南 Windows篇 - 获取源码(七)

1. 引言 在完成所有必要工具的安装和配置后,我们进入了Ungoogled Chromium编译过程的第一个关键阶段:获取源代码。本文将详细介绍如何正确获取和准备Ungoogled Chromium的源代码,为后续的编译工作打下基础。 2. 准备工作 2.1 环境检查 在…

人脸识别Adaface之libpytorch部署

目录 1. libpytorch下载2. Adaface模型下载3. 模型转换4. c推理4.1 前处理4.2 推理4.3 编译运行4.3.1 写CMakeLists.txt4.3.2 编译4.3.3 运行 1. libpytorch下载 参考: https://blog.csdn.net/liang_baikai/article/details/127849577 下载完成后,将其解…

Elasticsearch高性能实践

前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化,深入理解es各个名词及含义,深入分析es的使用过程中应注意的点,详细解释参数设置的原因以及目的,主要包括系统层面,参数层面。除此之外,优…

在idea中使用mysql(超详细)

一、连接mysql 在IDE开发工具中也是可以使用mysql的,这里以开发java常用的IntelliJ IDEA为例。 1. 打开idea,右上角有数据库侧边栏,打开侧边栏点击加号->数据源,可以看到支持很多数据库,选择mysql。 2. 首次使用需…

Python简化算法工具——“按位运算”

一、六种常见的“按位运算” 1.与(&)运算 运算规则:对两个整数对应的二进制位进行操作,当两个相应的二进制位都为1时,该位的结果才为1,否则为0。 a5 #0101b7 #0111print(a&b)#a&b0101#输出对…

Modbus转Profibus网关:打通多电机交流控制,打造自动化神器

在工业控制领域,Modbus和Profibus是两种非常常见的通信协议。Modbus由于其简单的结构、易于实现的特点被广泛应用在各种电子设备中,而Profibus则以其稳定性和实时性在大型自动化系统中占有一席之地。但是,有时候我们需要将这两种协议进行转换…

C++重点和练习

作业1&#xff1a;实现类中有类的几个特殊成员函数 #include <iostream>using namespace std;class Person {string name;int *age; public:Person():name("none"),age(new int(0)){}Person(int age):age(new int(age)){}Person(string name,int age):name(na…

亚马逊云科技用生成式AI,向开发的复杂性动手了

生成式 AI、分布式扩展功能全面进化&#xff0c;还降价了。 同一天的发布&#xff0c;完全不同的方向。 今天凌晨&#xff0c;云计算巨头亚马逊云科技的 re:Invent 与大号创业公司 OpenAI 的发布「撞了车」。后者公布了一系列生成式 AI 应用&#xff0c;价格更贵、性能更强大&a…

【操作系统】实验二:观察Linux,使用proc文件系统

实验二 观察Linux&#xff0c;使用proc文件系统 实验目的&#xff1a;学习Linux内核、进程、存储和其他资源的一些重要特征。读/proc/stat文件&#xff0c;计算并显示系统CPU占用率和用户态CPU占用率。&#xff08;编写一个程序使用/proc机制获得以及修改机器的各种资源参数。…

day2 数据结构 结构体的应用

思维导图 小练习&#xff1a; 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学…

SQL Server:只有MDF文件,如何附加数据库

第一步&#xff1a;先新建一个同名数据库&#xff0c;然后停止sql服务&#xff0c;删除新建数据库.ldf文件。 第二步&#xff1a;将要附加的数据库的.mdf文件覆盖刚新建的.mdf文件&#xff0c;并重启sql服务。 第三步&#xff1a;这时数据库DATA目录下只有一个.mdf文件&#xf…