DORIS - DORIS之倒排索引

news2024/11/12 16:23:14

什么是倒排索引?

倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,用于存储在全文搜索场景下某个单词在一个文档或者一组文档中的存储位置的映射,它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表,倒排索引主要由“单词词典”和“倒排文件”两部分组成。
倒排索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引。

在这里插入图片描述

正排索引(Forward Index),是以文档对象的唯一 ID 作为索引,以文档内容作为记录的结构。
在这里插入图片描述

构建过程

构建倒排索引是一个复杂而关键的过程,可以归纳为两个阶段:文档预处理阶段 和 倒排生成阶段。
(1)文档预处理阶段

  • 分词(Tokenization): 将文档拆分成单词或词汇单元,使用分词器将文本切分成有意义的词语,形成一个词汇列表。
  • 去停用词(Stopword Removal): 移除常见且在搜索中没有实际意义的词语,这有助于提高倒排索引的效率和准确性。
  • 词干提取(Stemming): 将词语还原为其词干形式,去除词尾,以便将相关的词汇映射到同一词根,减少索引的大小。
    (2)倒排生成阶段
  • 建立词汇表: 将预处理后的文档中的所有唯一词语构建成一个词汇表,每个词汇都有一个唯一的标识符。
  • 映射关键词到文档ID:遍历每个文档,对于文档中的每个关键词,将其映射到文档的唯一标识符(文档ID)。这样的映射关系通常以字典的形式保存。
  • 生成倒排列表: 对于每个关键词,创建一个倒排列表,其中包含映射到该关键词的所有文档ID。倒排列表实际上是一个映射,将关键词与包含该关键词的文档关联起来。
    在这里插入图片描述

倒排索引与正排索引的区别

(1)倒排索引和正排索引是两种索引文档的方式。
(2)正排索引是按照文档编号/ID等有序的方式将每个文档存储在索引中,通过文档编号/ID进行检索。这种方式类似于数据库表的行,可以很方便地根据主键ID检索到具体的文档,但是不适合处理大规模文档库的情况。
(3)倒排索引是按照单词或关键字将文档进行索引,并记录包含该词汇的文档列表。这种方式类似于数据库表的列,可以将具有相同属性的文档按照关键词进行分类,从而实现更加高效和精确的文本搜索。

应用场景

(1)数据检索:在大规模数据集中,倒排索引可用于快速检索和过滤数据。
(2)文本挖掘:在文本挖掘中,倒排索引可用于构建关键词-文档关联关系。例如,在社交媒体数据中,倒排索引可以帮助识别热门话题,找到包含特定关键词的帖子或文章。
(3)日志分析: 倒排索引可用于快速定位特定事件或异常。
(4)图像检索: 在图像检索中,倒排索引可用于通过图像的特征或标签快速检索相关图像。
(5)智能推荐系统: 在推荐系统中,倒排索引可以用于建立用户-商品或用户-兴趣关联关系,从而提高推荐的准确性。

DORIS的倒排索引

Doris的倒排索引,可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询。在 Doris 的倒排索引实现中,Table 的一行对应一个文档、一列对应文档中的一个字段,因此利用倒排索引可以根据关键词快速定位包含它的行,达到 WHERE 子句加速的目的。与Doris 中其他索引不同的是,在存储层倒排索引使用独立的文件,跟数据文件一一对应、但物理存储上文件相互独立,这样的好处是可以做到创建、删除索引不用重写数据文件,大幅降低处理开销。
(1)用于文本类型的全文检索(关键词匹配、短语系列匹配等)、普通数值日期类型的等值范围查询。
(2)与数据文件一一对应且独立存储。
(3)一个表可以有多个倒排索引,查询时多个倒排索引的条件可以任意组合。
(4)加速普通等值、范围查询,覆盖原来 BITMAP 索引的功能,代替 BITMAP 索引。
(5)存在精度问题的浮点数类型 FLOAT 和 DOUBLE 不支持倒排索引,替代方案是使用精度准确的定点数类型 DECIMAL,DECIMAL 支持倒排索引。

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

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

相关文章

AI开发-FAQ

1 需求 2 接口 3.1 pip下载指定版本 pip install package1.0.4 3.2 pip设置代理 pip install --proxyhttp://10.10.1.10:3128 somepackage 3.3 PyCharm设置代理 import os os.environ[http_proxy] http://your_proxy:port os.environ[https_proxy] http://your_proxy:portf…

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2:击穿 1.3:缓存雪崩 1.4:双写一致 1.5.持久化(RDB,AOF) 1.6…

80V降24V2A同步降压WT6037

80V降24V2A同步降压WT6037 WT6037是一款适用于36V-80V输入电压范围,输出24V2A电流的同步降压恒压芯片。该芯片具有宽输入电压范围,高转换效率,低静态电流消耗等特点,可广泛应用于电池组系统,电动自行车,电动…

SD-WAN网络如何实现双向访问?

在SD-WAN架构中,双向访问是一个重要的概念,它允许网络流量在不同方向上流动,从分支机构到数据中心或云端,再从数据中心或云端返回分支机构。本文将详细探讨SD-WAN如何实现双向访问,并解释其背后的工作原理。 什么是双向…

对话世优科技CEO纪智辉:AI模型让数字人发展按下加速键

2024年9月12日,中国国际服务贸易交易会全球服务贸易峰会在北京举行,世优科技作为深耕虚拟数字人领域的科技企业,聚焦“新而专”,连续两届参加服贸会。2024年,世优科技以合作供应商身份参与本届服贸会。 在AI的大浪潮下…

Jetpack Compose Side Effects in Details 副作用的详细信息

What is Side Effect’s? 副作用是什么? Side Effects is a change in the state of the application that occurs outside the scope of the composable function and is not related to the UI. In non-UI related state changes, our screen may recompose mor…

一、机器学习算法与实践_02KNN算法笔记

1、KNN基本介绍 1.1 定义 KNN(K-NearestNeighbor,即:K最邻近算法)是一种基于实例的学习方法,用于分类和回归任务,它通过查找一个数据点的最近邻居来预测该数据点的标签或数值。 所谓K最近邻,…

性能测试-性能分析与调优原理总结

性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。 从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是…

Elasticsearch基础(七):Logstash如何开启死信队列

文章目录 Logstash如何开启死信队列 一、确保 Elasticsearch 输出插件启用 DLQ 支持 二、配置 Logstash DLQ 设置 三、查看死信队列 四、排查 CSV 到 Elasticsearch 数据量不一致的问题 Logstash如何开启死信队列 在 Logstash 中,死信队列(Dead Le…

【Elasticsearch系列二】安装 Kibana

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

seafaring寻找漏洞

一.命令执行漏洞 &#xff08;1&#xff09;下面有一个输入框&#xff0c;输入ls进行查看 &#xff08;2&#xff09;输入echo <?php phpinfo();?> > qxl.php 并且访问 (3)写入一句话木马&#xff0c;并且访问蚁剑连接 echo <?php eval($_POST[cmd];?>>…

1T机械硬盘需要分区吗?你必须知道的分区知识

随着科技的不断发展&#xff0c;计算机存储设备的容量日益增大&#xff0c;1T(1TB&#xff0c;即1024GB)机械硬盘已成为许多电脑用户的标配。然而&#xff0c;在这样一个大容量硬盘面前&#xff0c;很多用户都会面临一个问题&#xff1a;是否需要对这块硬盘进行分区&#xff1f…

electron有关mac构建

针对 Mac M1/2/3 芯片的设备&#xff0c;proces.archarm64. 执行下面命令&#xff0c;检查下按照的 node.js 版本是不是 intel x64 指令集&#xff0c;如果是的话安装下 arm64 指令集的 node.js终端中执行以下命令&#xff1a;node -p process.arch 对应的node版本也是arm版 …

启明星辰防火墙结合宁盾双因素认证方案

防火墙是企业网络安全的第一道防线。近年来网络设备、安全设备的特权账号成为不法分子恶意攻击的首要目标&#xff0c;因此加强对防火墙登录&#xff08;特权账号&#xff09;身份鉴别十分重要。以启明星辰天清汉马USG防火墙为例&#xff0c;结合宁盾双因素认证&#xff0c;为特…

【C++】————IO流

作者主页&#xff1a; 作​​​​​​者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年9月9日 一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是 scanf() 和 printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;读…

图像滤波---各项异性扩散滤波使用笔记及代码

图像滤波---各项异性扩散滤波使用笔记及代码 一、文章内容介绍二、各项异性扩散滤波和各项同性滤波1、各项同性滤波2、各项异性扩散滤波3、各项异性和各项同性的对比 三、各项异性扩散滤波的原理介绍四、各项异性扩散滤波公式五、公式中的参数使用说明1、扩散速率 λ \lambda λ…

关键错误 你的开始菜单出现了问题 我们将尝试在你下一次登录时修复它。【笔记】

使用场景设备为Windows11系统&#xff0c;处理提示“关键错误 你的开始菜单出现了问题 我们将尝试在你下一次登录时修复它。”方法之一 处理步骤如下&#xff1a; 1、打开【设置】→【Windows更新】→【高级选项】。 2、切换界面选择【恢复】。 3、选择【使用Windows更新…

redhat目录结构详解

1、/&#xff1a; 根目录 2、/bin&#xff1a; 二进制文件&#xff0c;即命令&#xff0c;即linux的用户命令放在/bin目录中。 3、/boot&#xff1a; 跟启动相关的文件&#xff0c;比如内核都放在/boot目录中。 4、/dev&#xff1a; 内存中的目录&#xff0c;关…

基于Spark框架实现XGBoost模型

基于Spark框架实现XGBoost模型 原生的Spark MLlib并不支持XGBoost算法&#xff0c;但XGBoost4J-Spark提供了一种解决方案&#xff0c;使得我们可以在Spark环境中调用XGBoost。XGBoost4J-Spark是一个项目&#xff0c;旨在无缝集成XGBoost和Apache Spark&#xff0c;通过适配XGB…

为什么是删除缓存,而不是更新缓存?

一、事情起因 一般来说数据库与缓存一致性的方案大致有以下几种&#xff1a; 其中Cache-Aside Pattern&#xff0c;也被称为旁路缓存模式应该是使用的比较广泛 Cache-Aside Pattern&#xff0c;也被称为旁路缓存模式&#xff0c;是一种常见的缓存设计模式&#xff0c;其中缓存…