StarRocks全文倒排索引技术解析

StarRocks全文倒排索引技术解析

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

全文倒排索引概述

全文倒排索引是StarRocks 3.3.0版本引入的一项重要功能,它通过将文本内容分解为更小的词项(token),并为每个词项建立索引项,记录词项与数据文件中行号的映射关系。这种索引结构特别适合处理全文搜索场景,能够显著提升文本检索效率。

核心原理

StarRocks底层数据按列存储在数据文件中。当为某列创建全文倒排索引后:

  1. 系统会对该列的值进行分词处理(根据指定的分词器)
  2. 每个分词结果作为索引项,映射到包含该词项的行号
  3. 查询时,系统通过索引快速定位包含关键词的行号,大幅减少需要扫描的数据量

例如,某行数据包含"hello world"且行号为123,索引会建立两个条目:hello->123和world->123。

索引创建与管理

前置准备

在创建全文倒排索引前,需要:

  1. 启用FE配置项enable_experimental_gin
  2. 确保表为Duplicate Key表且表属性replicated_storage设为false

创建方式

建表时创建
CREATE TABLE `t` (
  `k` BIGINT NOT NULL COMMENT "",
  `v` STRING COMMENT "",
  INDEX idx (v) USING GIN("parser" = "english")
) ENGINE=OLAP 
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replicated_storage" = "false"
);
表创建后添加
ALTER TABLE t ADD INDEX idx (v) USING GIN('parser' = 'english');
-- 或
CREATE INDEX idx ON t (v) USING GIN('parser' = 'english');

分词器选择

StarRocks支持多种分词方式:

  1. english:英文分词
    • 按非字母字符切分
    • 自动转为小写
  2. chinese:中文分词
    • 基于CJK Analyzer实现
  3. standard:多语言分词
    • 支持混合语言场景(如中英文混合)
    • 同样会将英文转为小写
  4. none:不分词
    • 整行数据作为一个索引项

查询加速实践

启用索引加速

确保系统变量enable_gin_filter已开启,索引才能生效。

分词场景查询

当索引列配置了分词器时,仅支持MATCH谓词:

-- 查询包含"starrocks"的行
SELECT * FROM t WHERE t.value MATCH "starrocks";

-- 查询以"data"开头的行
SELECT * FROM t WHERE t.value MATCH "data%";
注意事项
  1. 模糊匹配需使用%,但关键词必须包含词的一部分
  2. 英文分词会将大写转为小写存储,查询时需用小写
  3. MATCH必须作为下推谓词出现在WHERE子句中

非分词场景查询

当索引列未配置分词器时,支持更多谓词:

  1. 表达式谓词:(NOT) LIKE, (NOT) MATCH
  2. 常规谓词:=, !=, <=, >=, IN, NOT IN, IS NULL, IS NOT NULL

性能验证

通过Query Profile中的GinFilterRowsGinFilter指标可验证索引效果:

  • GinFilterRows:通过索引过滤的行数
  • GinFilter:索引过滤耗时

最佳实践建议

  1. 英文内容推荐使用english分词器
  2. 中文内容推荐使用chinese分词器
  3. 混合语言场景使用standard分词器
  4. 精确匹配场景可考虑使用none不分词模式
  5. 查询时注意关键词大小写问题(英文分词场景)

全文倒排索引是StarRocks在文本检索领域的重要增强,合理使用可大幅提升相关查询性能。开发者应根据实际数据特点和查询模式选择合适的分词器,并遵循推荐的查询语法以获得最佳效果。

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强苹旖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值