向量搜索是 seekdb 的核心功能之一,它通过计算向量之间的相似度来找到语义上相关的内容。与传统的关键词匹配不同,向量搜索能够理解文本的语义含义。
将文本转换为高维向量的过程,如 1536 维的 OpenAI embedding
衡量两个向量夹角的方法,值越接近 1 表示越相似
欧几里得距离,衡量两个向量之间的直线距离
加速向量搜索的数据结构,如 HNSW、IVF 等
首先创建一个包含向量列的表结构
-- 创建文档表,包含向量列
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT,
embedding VECTOR(1536), -- 1536维向量
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建向量索引以加速搜索
CREATE INDEX idx_embedding ON articles
USING HNSW (embedding) WITH (M=16, ef_construction=200);点击"运行"按钮查看结果
使用 AI_EMBED 函数自动生成向量
-- 插入数据并自动生成向量嵌入
INSERT INTO articles (title, content, embedding)
VALUES
('深度学习入门',
'深度学习是机器学习的一个分支...',
AI_EMBED('深度学习是机器学习的一个分支...')),
('自然语言处理简介',
'NLP 是人工智能的重要领域...',
AI_EMBED('NLP 是人工智能的重要领域...')),
('计算机视觉应用',
'CV 技术广泛应用于图像识别...',
AI_EMBED('CV 技术广泛应用于图像识别...'));点击"运行"按钮查看结果
使用余弦距离查找相似内容
-- 使用余弦距离进行向量搜索
SELECT
id,
title,
COSINE_DISTANCE(embedding, AI_EMBED('如何学习人工智能')) AS distance
FROM articles
ORDER BY distance ASC
LIMIT 5;点击"运行"按钮查看结果
| 函数 | 适用场景 | 值域 | 排序方式 |
|---|---|---|---|
COSINE_DISTANCE | 文本相似度、推荐系统 | [0, 2] | ASC(越小越相似) |
L2_DISTANCE | 图像搜索、聚类分析 | [0, ∞) | ASC(越小越相似) |
INNER_PRODUCT | 归一化向量、打分排序 | [-1, 1] | DESC(越大越相似) |
在向量搜索中,余弦距离值为 0 表示什么?