Apache Doris 倒排索引如何做到文本检索性能提升40倍

倒排索引(Inverted Index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

倒排索引的应用场景

倒排索引作为一种高效的数据结构,在信息检索和文本搜索领域确实有着广泛的应用场景。以下是几个主要使用场景:

1. 搜索引擎

搜索引擎是倒排索引最典型的应用场景之一。搜索引擎如Google、百度等,利用倒排索引快速响应用户查询,通过扫描索引中的关键词来定位包含这些关键词的文档,从而大大提高了检索效率。搜索引擎会将文档集合中的每个文档进行分词处理,并建立关键词与文档ID的映射关系。用户查询时,只需在倒排索引中查找关键词对应的文档列表,即可快速获取相关结果。

2. 数据库索引

倒排索引不仅限于全文搜索引擎,还可以用于关系型或非关系型数据库的索引构建,以提高数据检索的速度和效率。相比于传统的正向索引,倒排索引能够更快地定位到包含特定关键词的记录,尤其适用于需要频繁进行全文搜索或复杂查询的数据库系统。

3. 文本检索

在文档库、图书馆、档案馆等场景中,文本检索是倒排索引的重要应用之一。通过倒排索引,可以快速查找包含指定关键词的文档,满足用户的信息检索需求。倒排索引能够大大减少搜索时间,提高检索效率,同时支持复杂的查询操作,如布尔检索、模糊检索等。

4. 推荐系统

在推荐系统中,倒排索引可以用于构建用户兴趣和行为数据的索引,以支持个性化推荐和相关推荐等功能。通过分析用户的历史行为数据,构建用户兴趣模型,并利用倒排索引快速召回与用户兴趣相关的内容或商品。

5. 日志分析

在大数据和云计算环境中,日志分析是保障系统稳定性和性能的重要手段。倒排索引可以用于快速检索和分析日志数据中的关键信息。通过倒排索引,可以快速地定位到包含特定日志级别的记录或包含特定关键字的日志条目,从而帮助开发者和运维人员快速排查问题。

6. 网络安全

在网络安全领域,倒排索引可以用于基于网络流量和日志数据的异常检测和入侵检测。通过分析网络流量和日志数据中的关键信息(如IP地址、端口号、关键字等),构建倒排索引以支持快速检索和匹配潜在的安全威胁。

7. 社交媒体

在社交媒体平台上,倒排索引可以用于构建用户搜索、内容推荐和精准广告等功能的索引。通过倒排索引,可以快速地响应用户的搜索请求,并基于用户的行为和兴趣推荐相关的内容或广告,提升用户体验和平台价值。

Apache Doris 倒排索引如何做到文本检索性能提升40倍的

为了能够更直观和有力的论证这个结论,接下来一起来看下在无索引硬匹配以及利用倒排索引加速查询的具体表现吧!

先搭建环境,我们进行集群创建和数据导入,使用单节点点集群(1FE、1BE)并按照以下步骤进行操作:

1.搭建 Apache Doris;

2.创建数据表:按照下列建表语句进行数据表创建;


3.下载数据集,数据集为 Parquet 格式,并经过 Snappy 压缩,总大小约为37GB;下载完成后,分别执行以下命令,导入数据集;


4.查看与验证:完成上述步骤后,可以在MySQL客户端执行!以下语句,来查看导入的数据行数和所占用空间。从下方代码可知:共导入135589433行数据,在Doris中占用空间25.873GB,比压缩后的 Parquet 列式存储进一步降低了30%。


无索引硬匹配

环境及数据准备就绪后,我们尝试对 review_body 列进行文本搜索查询。具体需求是在数据集中查出评论中包含" is super awesome "关键字的前5种产品,并按照评论数量降序排列,查询结果需显示每种产品的 ID、随机一个产品标题、平均星级评分以从及评论总数。review_body 列的特征是评论内容比较长,因此进行文本搜索会有一定的性能压力。

首先我们直接进行查询,以下是查询的示例语句:


执行结果如下,查询耗时为7.6秒


利用倒排索引加速查询

选择基于倒排索引进一步加速文本搜索的效率,可以通过以下步骤来构建倒排索引:

1.新增倒排索引:对 amazon_reviews 表的 review_body 列※添加倒排索引,该索引采用英文分词,并支持 Phrase 短语查询,短语查询即进行文本搜索时,分词后的词语顺序将会影响搜索结果。

2.为历史数据创建索引:按照新增索引信息对历史数据进行索引构建,使历史数据就也可以使用倒排索引进行查询。


3.查看及验证:构建完索引之后,可以通过以下方式对索引构建情况进行查看:


在倒排索引创建完成后,我们使用 MATCH_PHRASE 来查询包含关键词" issuperawesome "的产品评论信息(具体需求可回顾前文)。


执行结果如下所示,开启倒排索引后查询耗时仅0.19秒,性能较未开启索引时提升了近40倍,极大幅度提升了文本检索的效率。


究其加速原因可知,倒排索引是通过将文本分解为单词,并建立从单词到行号列表的映射。这些映射关系按照单词进行排序,并构建跳表索引。在查询特定单词时,可以通过跳表索引和二分查找等方法,在有序的映射中快速定位到对应的行号列表,进而获取行的内容。这种查询方式避免了逐行匹配,将算法复杂度从 O (n) 降低到 O (logn) ,在处理大规模数据时能显著提高查询性能。


Apache Doris 倒排索引五大核心优势

查询性能显著提升:倒排索引通过将文档中的每个词项映射到包含该词项的所有文档的列表,极大地加速了文本搜索和复杂查询的速度。在Apache Doris中,倒排索引特别适用于全文检索、模糊匹配以及非主键列检索等场景,能够显著降低查询SQL的运行时间和资源消耗;

支持复杂文本检索需求:支持多种语言的分词(如英文、中文等)、支持同时匹配多个关键字(MATCH_ALL)、匹配任意一个关键字(MATCH_ANY)以及匹配短语词组(MATCH_PHRASE)等。这使得Apache Doris能够满足多样化的文本检索需求,提升用户体验;

优化数据存储和访问模式:在Apache Doris中,倒排索引使用独立的文件进行存储,与segment文件有逻辑对应关系但存储相互独立。这种设计使得在创建、删除索引时无需重写tablet和segment文件,从而大幅降低了处理开销。同时,倒排索引的引入也促进了数据的有效组织和快速访问,提高了整体的数据处理效率。

性价比提升,主要从以下三方面间接体现:

- 存储成本降低:通过高效的索引技术和数据存储结构,Apache Doris能够在保证查询性能的同时降低存储成本。

- 写入速度提升:倒排索引的引入并未显著增加写入负担,反而可能通过优化数据访问模式提升写入速度(与基于ES的日志存储方案相比,Apache Doris的写入速度提升2倍以上,参考文章4)。

- 总体拥有成本(TCO)降低:由于查询性能的提升和存储成本的降低,Apache Doris在长期使用中的总体拥有成本可能会更低。

易于使用和维护:

- 灵活的索引管理:支持在建表时定义倒排索引,也支持在已有表上增加或删除倒排索引,且支持增量构建倒排索引,无需重写表中的已有数据。

- 标准的SQL查询:Apache Doris使用标准的SQL查询方式,对于创建了倒排索引的字段,查询时也遵循普通的SQL查询方式,这使得用户无需学习新的查询语言即可轻松上手。

- 丰富的分词器支持:虽然目前Apache Doris支持的分词器种类相对有限,但已经能够满足大多数常见需求,并且未来可能会继续增加新的分词器支持。

- 自动化管理:Doris提供了自动化的索引管理和优化策略,减轻了用户的维护负担。

#倒排索引#

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容