全文倒排索引
Beta feature
从版本 3.3.0 开始,StarRocks 支持全文倒排索引,可以将文本拆分成更小的词,并为每个词创建一个索引条目,显示该词与数据文件中对应行号之间的映射关系。对于全文搜索,StarRocks 根据搜索关键词查询倒排索引,快速定位匹配关键词的数据行。
主键表自 v4.0 起支持全文倒排索引。
全文倒排索引尚不支持存算分离集群。
概述
StarRocks 将其底层数据存储在按列组织的数据文件中。每个数据文件包含基于索引列的全文倒排索引。索引列中的值被分词为单个词。分词后的每个词被视为一个索引条目,映射到该词出现的行号。目前支持的分词方法包括英文分词、中文分词、多语言分词和不分词。
例如,如果一行数据包含 "hello world" 且其行号为 123,全文倒排索引根据分词结果和行号构建索引条目:hello->123, world->123。
在全文搜索过程中,StarRocks 可以使用全文倒排索引定位包含搜索关键词的索引条目,然后快速找到关键词出现的行号,显著减少需要扫描的数据行数。
基本操作
创建全文倒排索引
在创建全文倒排索引之前,需要启用 FE 配置项 enable_experimental_gin。
ADMIN SET FRONTEND CONFIG ("enable_experimental_gin" = "true");
备注
在为表创建全文倒排索引时,必须禁 用该表的 replicated_storage 功能。
- 对于 v4.0 及更高版本,创建索引时该功能会自动禁用。
- 对于 v4.0 之前的版本,必须手动将表属性
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。