云原生多模数据库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 ')'
                                        [ 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 是否需要搜索索引。
  • true:默认值,需要搜索索引。
  • false:不需要搜索索引。
rowStored String 是否存储原始数据。
  • true:存储原始数据。
  • false:默认值,不存储原始数据。
columnStored String 是否设置为列存储,用来加速排序分析。
  • true:默认值,设置列存储。
  • false:不设置列存储。
type String 分词场景下,分词字段需要设置type参数为text,其它情况默认与宽表数据类型保持一致。
说明 需要同时与analyzer分词器使用。
analyzer String 分词器列表。取值:
  • standard
  • english
  • ik
  • whitespace
  • comma
说明
  • 需要同时与type参数使用。
  • 当列在宽表中类型为数据类型(例如:INT)时,需要用standard分词器。

index_options参数的说明。

参数 类型 描述
indexState String 搜索索引状态,取值为:
  • BUILDING:默认值。
  • ACTIVE:在没有历史数据的场景下,设置为ACTIVE。
numShards String 指定分片数,默认与搜索节点个数相等。

示例

  1. 创建SCHEMA和表。如果SCHEMA和表已存在,可以跳过该步骤。
    CREATE SCHEMA test;
    USE test;
    CREATE TABLE IF NOT EXISTS tbn (p1 varchar, p2 varchar, col1 bigint, col2 varchar, col3 varchar, constraint primary key (p1, p2 desc));
  2. 根据不同需求创建搜索索引。
    • 创建所有列的搜索索引,不指定具体列属性,均为默认值。
      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, col3) WITH (indexState=ACTIVE);
    • 指定列,并指定部分列属性,同时指定搜索索引状态。
      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属性需要同时设置。
  3. 创建搜索索引后,需要执行REBUILD操作,默认异步执行。
    ALTER SEARCH INDEX IF EXISTS idx ON tbn REBUILD;