倒排索引,是信息检索领域常用的索引技术,将文本分成一个个词,构建 词 -> 文档编号 的索引,可以快速查找一个词在哪些文档出现。
从 2.0.0 版本开始,Doris 支持倒排索引,可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询,快速从海量数据中过滤出满足条件的行。
在 Doris 的倒排索引实现中,Table 的一行对应一个文档、一列对应文档中的一个字段,因此利用倒排索引可以根据关键词快速定位包含它的行,达到 WHERE 子句加速的目的。
与 Doris 中其他索引不同的是,在存储层倒排索引使用独立的文件,跟数据文件一一对应、但物理存储上文件相互独立。这样的好处是可以做到创建、删除索引不用重写数据文件,大幅降低处理开销。
倒排索引的使用范围很广泛,可以加速等值、范围、全文检索(关键词匹配、短语系列匹配等)。一个表可以有多个倒排索引,查询时多个倒排索引的条件可以任意组合。
倒排索引的功能简要介绍如下:
1. 加速字符串类型的全文检索
- 支持关键词检索,包括同时匹配多个关键字 、匹配任意一个关键字
- 支持短语查询
- 支持指定词距
- 支持短语+前缀
- 支持分词正则查询
- 支持英文、中文以及 Unicode 多种分词
2. 加速普通等值、范围查询,覆盖原来 BITMAP 索引的功能,代替 BITMAP 索引
- 支持字符串、数值、日期时间类型的 =, !=, >, >=, <, <= 快速过滤
- 支持字符串、数字、日期时间数组类型的 =, !=, >, >=, <, <=
3. 支持完善的逻辑组合
- 不仅支持 AND 条件加速,还支持 OR NOT 条件加速
- 支持多个条件的任意 AND OR NOT 逻辑组合
4. 灵活高效的索引管理
- 支持在创建表上定义倒排索引
- 支持在已有的表上增加倒排索引,而且支持增量构建倒排索引,无需重写表中的已有数据
- 支持删除已有表上的倒排索引,无需重写表中的已有数据
在建表语句中 COLUMN 的定义之后是索引定义:
语法说明如下:
1. 是必须的, 是建索引的列名,必须是前面列定义中出现过的, 是索引名字,必须表级别唯一,建议命名规范:列名前面加前缀
2. 是必须的,用于指定索引类型是倒排索引
3. 是可选的,用于指定倒排索引的额外属性,目前支持的属性如下:
4. 是可选的,用于指定索引注释
1. ADD INDEX
支持 和 两种语法,参数跟建表时索引定义相同
2. BUILD INDEX
操作只是新增了索引定义,这个操作之后的新写入数据会生成倒排索引,而存量数据需要使用 触发:
通过 查看 进度:
通过 取消 :
如果想检查分词实际效果或者对一段文本进行分词行为,可以使用 TOKENIZE 函数进行验证。
TOKENIZE 函数的第一个参数是待分词的文本,第二个参数是创建索引指定的分词参数。
用 HackerNews 100 万条数据展示倒排索引的创建、全文检索、普通查询,包括跟无索引的查询性能进行简单对比。
通过 Stream Load 导入数据
SQL 运行 count() 确认导入数据成功
01 全文检索
- 用 匹配计算 comment 中含有 'OLAP' 的行数,耗时 0.18s
- 用基于倒排索引的全文检索 计算 comment 中含有'OLAP'的行数,耗时 0.02s,加速 9 倍,在更大的数据集上效果会更加明显
这里结果条数的差异,是因为倒排索引对 comment 分词后,还会对词进行进行统一成小写等归一化处理,因此 比 的结果多一些
- 同样的对比统计 'OLTP' 出现次数的性能,0.07s vs 0.01s,由于缓存的原因 和 都有提升,倒排索引仍然有 7 倍加速
- 同时出现 'OLAP' 和 'OLTP' 两个词,0.13s vs 0.01s,13 倍加速
要求多个词同时出现时(AND 关系)使用 'keyword1 keyword2 ...'
- 任意出现 'OLAP' 和 'OLTP' 其中一个词,0.12s vs 0.01s,12 倍加速
只要求多个词任意一个或多个出现时(OR 关系)使用 'keyword1 keyword2 ...'
02 普通等值、范围查询
- DataTime 类型的列范围查询
- 为 timestamp 列增加一个倒排索引
- 查看索引创建进度,通过 FinishTime 和 CreateTime 的差值,可以看到 100 万条数据对 timestamp 列建倒排索引只用了 1s
- 索引创建后,范围查询用同样的查询方式,Doris 会自动识别索引进行优化,但是这里由于数据量小性能差别不大
- 在数值类型的列 Parent 进行类似 timestamp 的操作,这里查询使用等值匹配
- 对字符串类型的 建立不分词的倒排索引,等值查询也可以利用索引加速
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/4092.html