当前位置: 首页 > article >正文

DORIS - DORIS之倒排索引

什么是倒排索引?

倒排索引(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.kler.cn/a/304708.html

相关文章:

  • uniapp使用scroll-view下拉刷新与上滑加载
  • C获取程序名称的方法
  • 【计算机网络】【网络层】【习题】
  • 2024年11月13日
  • 【算法】——二分查找合集
  • HarmonyOS Next星河版笔记--界面开发(4)
  • 【实践】应用访问Redis突然超时怎么处理?
  • FastAPI 应用安全加固:HTTPSRedirectMiddleware 中间件全解析
  • OpenStack × OceanBase: 打造高可用可扩展的基础设施平台
  • ARM驱动学习之4小结
  • Docker高级管理--Compose容器编排与私有仓库(Docker技术集群与应用)
  • 使用Spring Boot集成Nacos进行配置管理
  • rocky8安装docker步骤
  • Apple Watch Series 10 動手玩:更大、更輕、更薄
  • 华为VRP系统基本操作
  • php 之 php-fpm 和 nginx结合使用
  • 使用Rustup快速无缝升级Rust
  • Mac快速复制和删除命令
  • Gitlab实现多项目触发式自动CICD
  • 时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测
  • Java许可政策再变,Oracle JDK 17 免费期将结束!
  • 7.测试用例设计方法 + Bug
  • linux安全软件Hydra使用教程
  • 速盾:cdn节点越多越好吗?
  • 如何优雅的使用 Nacos
  • Go语言现代web开发11 函数