全文倒排索引
Beta feature
从版本 3.3.0 开始,StarRocks 支持全文倒排索引,可以将文本拆分成更小的词,并为每个词创建一个索引条目,显示该词与数据文件中对应行号之间的映射关系。对于全文搜索,StarRocks 根据搜索关键词查询倒排索引,快速定位匹配关键词的数据行。
全文倒排索引尚不支持主键表和存算分离集群。
概述
StarRocks 将其底层数据存储在按列组织的数据文件中。每个数据文件包含基于索引列的全文倒排索引。索引列中的值被分词为单个词。分词后的每个词被视为一个索引条目,映射到该词出现的行号。目前支持的分词方法包括英文分词、中文分词、多语言分词和不分词。
例如,如果一行数据包含 "hello world" 且其行号为 123,全文倒排索引根据分词结果和行号构建索引条目:hello->123, world->123。
在全文搜索过程中,StarRocks 可以使用全文倒排索引定位包含搜索关键词的索引条目,然后快速找到关键词出现的行号,显著减少需要扫描的数据行数。
基本操作
创建全文倒排索引
在创建全文倒排索引之前,需要启用 FE 配置项 enable_experimental_gin
。
ADMIN SET FRONTEND CONFIG ("enable_experimental_gin" = "true");
此外,全文倒排索引只能在明细表中创建,并且表属性 replicated_storage
需要为 false
。
在创建表时创建全文倒排索引
在列 v
上创建使用英文分词的全文倒排索引。
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"
);
parser
参数指定分词方法。支持的值及描述如下:none
(默认): 不分词。构建全文倒排索引时,索引列中的整行数据被视为单个索引项。english
: 英文分词。此分词方法通常在任何非字母字符处进行分词。此外,大写英文字符会被转换为小写。因此,查询条件中的关键词需要是小写英文而不是大写英文,以利用全文倒排索引定位数据行。chinese
: 中文分词。此分词方法使用 CLucene 中的 CJK Analyzer 进行分词。standard
: 多语言分词。此分词方法提供基于语法的分词(基于 Unicode Text Segmentation algorithm),适用于大多数语言和混合语言的情况,如中英文。例如,此分词方法可以区分中英文。当中英文共存时,分词后会将大写英文字符转换为小写。因此,查询条件中的关键词需要是小写英文而不是大写英文,以利用全文倒排索引定位数据行。
- 索引列的数据类型必须是 CHAR、VARCHAR 或 STRING。
在创建表后添加全文倒排索引
在创建表后,可以使用 ALTER TABLE ADD INDEX
或 CREATE INDEX
添加全文倒排索引。
ALTER TABLE t ADD INDEX idx (v) USING GIN('parser' = 'english');
CREATE INDEX idx ON t (v) USING GIN('parser' = 'english');