体验语义索引
本教程将引导您快速上手 seekdb 语义索引,帮助您理解语义索引的实际应用,并在几分钟内体验语义索引的强大功能:无需手动转换为向量,直接存储文本即可实现语义搜索。
概述
语义索引(Hybrid Vector Index)指可以自动将文本转换为向量并建立索引的向量索引,是 seekdb 提供的一项强大功能,它实现了向量概念对用户的透明化。与不使用语义索引的向量索引相比,语义索引极大地简化了使用流程。
- 不使用语义索引的向量索引流程:
文本 → 手动调用 `AI_EMBED` 函数生成向量 → 插入向量 → 使用向量搜索 - 语义索引流程:
文本 → 直接插入 → 直接使用文本搜索
seekdb 会在内部自动将文本转换为向量并建立索引,搜索时也只需提供原始文本,系统会自动进行嵌入并搜索向量索引,从而显著提升了使用的便捷性。
前提条件
- 联系管理员获取相应的数据库连接串,然后执行以下命令连接到数据库:
# host: seekdb 数据库连接 IP。
# port: seekdb 数据库连接端口。
# database_name: 需要访问的数据库名称。
# user_name: 数据库用户名。
# password: 数据库密码。
mysql -h$host -P$port -u$user_name -p$password -D$database_name - 确保你已拥有 AI 函数服务相关权限,并确保数据库中已使用
CREATE_AI_MODEL和CREATE_AI_MODEL_ENDPOINT程序注册嵌入模型(Embedding Model):CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_embed');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_embed_endpoint');
CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_embed', '{
"type": "dense_embedding",
"model_name": "BAAI/bge-m3"
}');
CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_embed_endpoint', '{
"ai_model_name": "ob_embed",
"url": "https://api.siliconflow.cn/v1/embeddings",
-- 需替换为实际的 access_key
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');
信息
语义索引功能当前版本仅支持 HNSW/HNSW_BQ 索引类型。
步骤一:创建语义索引
语义索引支持建表时创建和后建两种方式。
信息
创建语义索引时必须指定在 VARCHAR 列上,并指定嵌入模型和向量维度。
建表时创建
CREATE TABLE items (
id INT PRIMARY KEY,
doc VARCHAR(100),
VECTOR INDEX vector_idx(doc)
WITH (distance=l2, lib=vsag, type=hnsw, model=ob_embed, dim=1024, sync_mode=immediate)
);
后建索引
CREATE TABLE items1 (
id INT PRIMARY KEY,
doc VARCHAR(100)
);
CREATE VECTOR INDEX vector_idx
ON items (doc)
WITH (distance=l2, lib=vsag, type=hnsw, model=ob_embed, dim=1024, sync_mode=immediate);
步骤二:插入文本数据(无需手动向量化)
插入文本数据时,系统会自动进行嵌入,无需手动调用 AI_EMBED 函数:
INSERT INTO items(id, doc) VALUES(1, 'Rose');
INSERT INTO items(id, doc) VALUES(2, 'Sunflower');
INSERT INTO items(id, doc) VALUES(3, 'Lily');
步骤三:使用文本直接搜索
使用 semantic_distance 函数,传入原始文本进行向量搜索,无需手动生成查询向量:
SELECT id, doc FROM items
ORDER BY semantic_distance(doc, 'flower')
APPROXIMATE LIMIT 3;
返回结果如下:
+----+-----------+
| id | doc |
+----+-----------+
| 1 | Rose |
| 2 | Sunflower |
| 3 | Lily |
+----+-----------+
3 rows in set
系统会自动将查询文本 'flower' 转换为向量,然后在向量索引中搜索最相似的文本。