本文介绍创建搜索索引的语法及使用说明。
云原生多模数据库Lindorm支持通过CREATE SEARCH INDEX
语句创建搜索索引。搜索索引的详细说明,请参见搜索索引介绍。
使用说明
- 搜索索引主要适用于多维查询场景,支持任意列的排序或分页查询。
- 一张表只能生成一个搜索索引,可以在原有搜索索引基础上增加新的索引列。
- 如果历史数据中有新增的列,需要进行一次全量索引构建,支持星号(*)创建所有列的搜索索引。
- 索引列支持的数据类型包括:TINYINT、SMALLINT、INTEGER、INT、BIGINT、LONG、FLOAT、DOUBLE、VARCHAR、BINARY、VARBINARY、BOOLEAN。
语法
CREATE SEARCH INDEX [ IF NOT EXISTS ] index_name
ON table_name '(' index_identifier ')'
[ASYNC]
[ WITH '(' index_options ')' ]
index_identifier:
(column_name'(' column_options ')' ',' ... column_name'(' column_options ')')* | "*"
column_options:
option_name '=' option_value (',' option_name '='option_value)
index_options:
option_name '=' option_value (',' option_name '='option_value)
参数
column_options参数的说明。
参数 | 类型 | 描述 |
---|---|---|
indexed | String | 是否需要搜索索引。
|
rowStored | String | 是否存储原始数据。
|
columnStored | String | 是否设置为列存储,用来加速排序分析。
|
type | String | 分词场景下,分词字段需要设置type参数为text,其它情况默认与宽表数据类型保持一致。 说明 需要同时与analyzer分词器使用。 |
analyzer | String | 分词器列表。取值:
说明 需要同时与type参数使用。 |
index_options参数的说明。
参数 | 类型 | 描述 |
---|---|---|
indexState | String | 搜索索引状态,取值为:
|
numShards | String | 指定分片数,默认是搜索节点个数的两倍。 |
RANGE_TIME_PARTITION_START | String | 表示创建索引操作前多少天开始创建分区。适用于有历史数据的场景,如果历史数据的时间戳比开始分区的时间还要小,则会报错。 说明 创建时间范围分区索引时必须指定此参数。 |
RANGE_TIME_PARTITION_INTERVAL | String | 表示间隔多少天创建新分区,例如RANGE_TIME_PARTITION_INTERVAL='7',表示每隔一周创建一个新分区。 说明 创建时间范围分区索引时必须指定此参数。 |
RANGE_TIME_PARTITION_TTL | String | 表示保留多少天的分区数据,例如RANGE_TIME_PARTITION_TTL='180',表示保留半年的分区数据,历史分区数据会被自动清理掉。不指定时则表示不会被清理。 说明 该参数仅作用于创建时间范围分区索引。 |
RANGE_TIME_PARTITION_MAX_OVERLAP | String | 如果写入的数据时间点是将来的时间,这个参数表示最多允许与当前时刻的时间间隔,单位为天。不指定时则表示无限制。 说明 该参数仅作用于创建时间范围分区索引。 |
RANGE_TIME_PARTITION_FIELD_TIMEUNIT | String | 表示业务指定的时间分区字段单位,默认单位为毫秒(ms)。
说明 该参数仅作用于创建时间范围分区索引。 |
示例
- 创建SCHEMA和表。如果SCHEMA和表已存在,可以跳过该步骤。
CREATE SCHEMA test; USE test; CREATE TABLE IF NOT EXISTS tbn (p1 varchar, p2 varchar, col1 bigint, col2 varchar, col3 varchar, col4 bigint, constraint primary key (p1, p2 desc));
- 根据不同场景创建搜索索引。
- 通过指定索引列属性的方式,系统默认会执行同步构建搜索索引,对历史数据执行索引构建,执行过程所需的时间较长。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn(col1, col2, col3);
- 创建搜索索引时如果不需要执行同步构建搜索索引,可以在创建搜索索引语句后增加
ASYNC
。后续如果需要执行同步构建搜索索引,请参见步骤3。CREATE SEARCH INDEX IF NOT EXISTS idx on tbn(col1, col2, col3) ASYNC;
- 创建所有列的搜索索引,不指定具体列属性,均为默认值。注意:动态列不会被包含到索引中,参见使用动态列建索引。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn("*");
- 创建所有列的搜索索引,指定具体列属性。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn("*",col1(type=text,analyzer=ik,indexed=true));
- 指定所有列共同属性。如果索引列有col1,col2,col3,索引列的属性都为type=text,analyzer=ik,indexed=true。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn("*"(type=text,analyzer=ik,indexed=true));
- 指定列,不指定列属性。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn(col1, col2, col3);
- 指定列,并指定部分列属性,同时指定搜索索引状态。
CREATE SEARCH INDEX IF NOT EXISTS idx on tbn(col1, col2(type=text,analyzer=ik), col3) WITH (indexState=ACTIVE,numShards=4);
说明 当设置column_options
时,type和analyzer属性需要同时设置。 - 指定列,创建时间分区索引。按时间列col4分区,从30天前开始,每7天自动分区,默认保留90天的分区数据。
CREATE SEARCH INDEX idx ON tbn (col1, col2, col3, col4) partition by range time(col4) partitions 16 with (indexState=ACTIVE, RANGE_TIME_PARTITION_START='30', RANGE_TIME_PARTITION_INTERVAL='7', RANGE_TIME_PARTITION_TTL='90', RANGE_TIME_PARTITION_MAX_OVERLAP='90');
- 通过指定索引列属性的方式,系统默认会执行同步构建搜索索引,对历史数据执行索引构建,执行过程所需的时间较长。
- 如果使用
ASYNC
方式异步构建搜索索引,并且需要历史数据也被检索,请执行以下语句,默认同步构建搜索索引。执行后,可以在LTS页面左侧导航栏选择 ,查看REBUILD进度,具体操作请参见购买并登录LTS。ALTER SEARCH INDEX IF EXISTS idx ON tbn REBUILD;