轻量级向量搜索:SQLite 扩展 sqlite-vec
轻量级向量搜索 SQLite 扩展:sqlite-vec
想要在你的数据库中进行高效的向量搜索吗? sqlite-vec 是一个超小巧、速度够用的 SQLite 扩展,让你可以轻松实现!它完全用 C 写成,没有依赖项,可以在任何SQLite支持的环境下运行(Linux/MacOS/Windows、浏览器 (WASM)、Raspberry Pi 等)。
sqlite-vec 的优势:
- 轻量级: 体积非常小巧,对资源占用极低。
- 快速: 虽然不是最快的向量搜索引擎,但速度足够满足大多数应用需求。
- 无依赖: 纯 C 实现,无需任何额外库或工具。
- 平台无关: 在任何支持 SQLite 的环境中运行。
使用场景:
sqlite-vec 最适合于需要快速、高效地进行小型到中等规模的向量搜索的任务,例如:
- 文本相似性搜索
- 图像识别
- 音频分析
- 推荐系统
关键特性:
- 支持存储和查询 float、int8 和二进制向量。
- 使用
vec0
虚拟表进行高效存储和查询。 - 可使用
rowid IN (...)
子查询进行预筛选向量,提高查询效率。
安装:
sqlite-vec 的安装非常简单,支持多种编程语言:
- Python:
pip install sqlite-vec
- Node.js:
npm install sqlite-vec
- Ruby:
gem install sqlite-vec
- Go:
go get -u github.com/asg017/sqlite-vec/bindings/go
- Rust:
cargo add sqlite-vec
示例:
-- 创建一个名为 vec_examples 的虚拟表,存储浮点型向量
CREATE VIRTUAL TABLE vec_examples USING vec0(sample_embedding float[8]);
-- 插入一些示例向量数据
INSERT INTO vec_examples (rowid, sample_embedding) VALUES
(1, '[-0.200, 0.250, 0.341, -0.211, 0.645, 0.935, -0.316, -0.924]'),
(2, '[0.443, -0.501, 0.355, -0.771, 0.707, -0.708, -0.185, 0.362]'),
-- ...
-- 执行 KNN 查询,查找与给定向量的最相似的两个向量
SELECT rowid, distance FROM vec_examples WHERE sample_embedding MATCH '[0.890, 0.544, 0.825, 0.961, 0.358, 0.0196, 0.521, 0.175]' ORDER BY distance LIMIT 2;
贡献者:
sqlite-vec 是 Mozilla Builders 项目,并得到了 Fly.io、Turso 和 SQLite Cloud 的赞助。
更多信息:
- 原文作者:iamdev
- 原文链接:https://blog.iamdev.cn/post/2024/%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%90%91%E9%87%8F%E6%90%9C%E7%B4%A2_SQLite_%E6%89%A9%E5%B1%95_sqlite_vec__/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止转载 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。