创建向量索引

语法

CREATE TABLE table_name( columns_difinition, INDEX index_name (column_name) USING VECTOR PROPERTIES( "property1" = "value1", "property2" = "value2" ) );

columns_difinition:定义表的字段信息,最后一个字段必须使用逗号隔开

INDEX:关键字

index_name:自定义index的名称

column_name:需要添加索引的字段名称

VECTOR:关键字,表示向量索引

COMMENT:指定index的说明信息

PROPERTIES:指定向量INDEX的参数

参数名称可选值默认值备注
distance.functionl2_distance, cosine_distance, jaccard_distance, hamming_distancecosine_distance-
scalar.typef32, f16, i8, b1f32向量索引中的向量元素类型,可与 vector column 不一致
m建议不超过100016HNSW算法中的最大邻居数
ef.construction建议不超过5000128HNSW算法构建索引时的候选集大小
reuse.vector.columnfalse/truefalse是否复用 vector column 的数据以节省存储空间
compress.codecuncompressed/zstd/lz4uncompressed向量索引的压缩算法;复用column时不生效
compress.levelfatest/default/bestdefault压缩算法级别
compress.byte.stream.splitfalse/truetrue压缩前重排 float bit
compress.block.size大于1M的整数16777216压缩块大小
conversion.ruledefault/as_bitsdefault需要把 vector(tinyint, N) 类型按位建索引时使用 as_bits

向量索引标量类型与列类型

索引元素类型 指的是 properites 中 scalar.type 指定的类型;两者类型不一致时,会执行一定的转换规则(多数情况下是 cast),当使用 b1 类型时除外。

索引元素类型支持的向量元素类型备注
b1tinyint, int, float"conversion.rule" = "bits" 时,会把 vector(tinyint, N) 中的每个bit当成向量中的一个元素 "conversion.rule" = "default" 时,会将向量二值化
i8tinyint, int, float向量元素类型与索引不一致时,执行 cast (注意可能会 overflow)
f16int, float向量元素类型与索引不一致时,执行 cast
f32int, float向量元素类型与索引不一致时,执行 cast

案例

CREATE TABLE test_vector1 ( vec vector(float, 4), id int, index test_vector1_vec_idx (vec) using vector properties ( "scalar.type" = "f32", "distance.function" = "l2_distance" ) )

参考文档

使用说明

向量索引使用说明

已有的表增加向量索引

语法

CREATE VECTOR INDEX [IF NOT EXISTS] index_name ON TABLE [schema].table_name(col_name) PROPERTIES( "property1" = "value1", "property2" = "value2" )

VECTOR:索引类型,向量索引

index_name: 表名字,位于schema下,schema下索引名称不能重复

PROPERTIES:指定INDEX的参数

说明

执行CREATE INDEX仅对新增数据有效

案例

CREATE TABLE test_vector2 ( vec vector(float, 512), id int ) ; CREATE VECTOR INDEX test_vector2_vec_idx ON TABLE test_vector2(vec) PROPERTIES ( "scalar.type" = "f32", "distance.function" = "l2_distance" );

联系我们
预约咨询
微信咨询
电话咨询