存储向量数据
本文档介绍了如何在 seekdb 中统一存储非结构化数据、半结构化数据和结构化数据。这不仅充分利用了 seekdb 的基础能力,还为混合搜索提供了强大支持。
存储原理
seekdb 能够存储不同模态的数据,支持混合搜索的原理是将不同模态的数据(如文本、图片、视频等)统一转换为向量,通过计算向量之间的距离来实现搜索。混合搜索分为两种方式:简单搜索基于单个向量的相似度搜索,复杂搜索则涉及向量与标量的混合搜索。
由于向量搜索本身具有近似性,实际应用中需结合多种手段提高精度,精确的搜索结果才能为业务带来更大价值。
创建向量列
下述示例体现了一张表同时存储了向量数据、空间数据和关系型数据。向量列的数据类型为 VECTOR,并且必须在创建时指定维度,维度最高支持 16000;空间列的数据类型为 GEOMETRY:
CREATE TABLE t (
-- 存储关系型数据(结构化数据)
id INT PRIMARY KEY,
-- 存储空间数据(半结构化数据)
g GEOMETRY,
-- 存储向量数据(非结构化数据)
vec VECTOR(3)
);
使用 INSERT 语句插入向量数据
一旦创建了包含 VECTOR 数据类型列的表,就可以直接使用 INSERT 语句将向量插入表中。在插入数据时,向量必须与表定义时指定的维度相匹配,否则会报错。这种设计确保了数据的一致性和查询的效率。向量的格式采用标准的浮点数数组表示,每个维度的值必须是有效的浮点数。这是一个简单的示例:
INSERT INTO t (id, g, vec) VALUES (
-- 插入结构化数据
1,
-- 插入半结构化数据
ST_GeomFromText('POINT(1 1)'),
-- 插入非结构化数据
'[0.1, 0.2, 0.3]'
);