ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DuckDB 如何获得 ANN 向量搜索能力:VexDB-Lite 扩展安装与首个图索引实战

DuckDB 如何获得 ANN 向量搜索能力:VexDB-Lite 扩展安装与首个图索引实战 DuckDB 如何获得 ANN 向量搜索能力VexDB-Lite 扩展安装与首个图索引实战【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-LiteDuckDB 本身是一款强大的分析型数据库但默认并不支持 ANN近似最近邻向量搜索。开源项目 VexDB-Lite 提供了一个 DuckDB 扩展通过LOAD一个文件即可让 DuckDB 拥有l2_distance等距离函数、GRAPH_INDEX自研图索引和 PQ/RaBitQ 向量量化能力用一条CREATE INDEX就能完成首个向量索引的搭建。下面带你从零安装到跑通第一次 ANN 查询。为什么 DuckDB 需要向量搜索能力大模型应用里语义检索几乎无处不在RAG 问答、图片相似检索、Agent 记忆都依赖用向量找最相似的能力。而 DuckDB 常用于数据分析、嵌入式场景和 Python 数据管道正好是数据已经在这里、只差一把向量检索钥匙的典型场景。装一个扩展比再引入一套独立向量数据库服务轻量得多。认识 VexDB-Lite跨平台的向量搜索扩展VexDB-Lite 是一个跨平台向量相似度搜索引擎同时支持 PostgreSQL、DuckDB 和 SQLite 三个后端共享同一套图索引算法、SIMD 距离计算和量化内核。DuckDB 端的核心能力包括向量类型直接使用 DuckDB 原生的FLOAT[N]定长数组无需自定义类型距离函数l2_distance欧氏、cosine_distance余弦、inner_product内积以及-、、~运算符图索引CREATE INDEX ... USING GRAPH_INDEX支持并行构建、元数据过滤量化加速PQ 产品量化与 RaBitQ配合memory_modecompact可大幅压缩索引内存优化器改写ORDER BY 距离函数 LIMIT k会自动改写为VEXDB_INDEX_SCAN执行详细文档见 vexdb_duckdb/README.mdDuckDB 端实现位于 vexdb_duckdb/ 目录。安装 VexDB-Lite 扩展两条路方式一加载预编译扩展最快如果你已经有编译好的vexdb_lite.duckdb_extension文件例如 aarch64 Linux 平台的发布产物在dist/aarch64-linux/只需三步SET allow_unsigned_extensions true; LOAD /path/to/vexdb_lite.duckdb_extension; SELECT vexdb_version(); -- 返回版本号说明加载成功注意两点DuckDB 默认禁止未签名扩展CLI 用户直接以duckdb -unsigned启动Python 用户连接时传config{allow_unsigned_extensions: true}扩展与 DuckDB 版本绑定默认为 v1.5.2版本不匹配会报Could not load library用SELECT version();核对方式二从源码构建依赖 GCC 9.3 / Clang 10、CMake 3.20 和 Boost 1.84 头文件构建脚本 build_duck.sh 会替你处理克隆 DuckDB、cmake 配置与编译git clone https://gitcode.com/gh_mirrors/ve/VexDB-Lite cd VexDB-Lite bash build_duck.sh setup # 首次克隆 DuckDB v1.5.2 并配置约 5 分钟 bash build_duck.sh build # 编译扩展约 20 分钟产物位于build/duck/build/extension/vexdb_lite/vexdb_lite.duckdb_extension。如果 Boost 不在默认路径设置BOOST_INCLUDEDIR和BOOST_ROOT环境变量后再构建即可编译细节见 vexdb_duckdb/CMakeLists.txt。创建首个图索引三条 SQL 搞定第一步建表。向量列用FLOAT[N]类型N 即向量维度CREATE TABLE items (id INTEGER, vec FLOAT[128]);第二步插入数据可以用list_value(...)、Python 的executemany等方式批量插入。第三步建图索引CREATE INDEX idx_vec ON items USING GRAPH_INDEX (vec) WITH (metric l2, m 16, ef_construction 64, threads 4);核心参数怎么理解参数默认值通俗解释metricl2距离度量l2欧氏 /cosine余弦 /ip内积m16每个节点最多连多少条路越大图越密ef_construction64建图时的搜索宽度越大召回越好、建索引越慢threads1并行 worker 数1 启用并行构建维度不需要显式声明——建索引时会自动从首个非 NULL 向量推断之后插入的向量维度不一致会直接报错帮你避免脏数据。运行第一次 ANN 向量搜索索引建好后查询就是一条再普通不过的ORDER BY ... LIMITSET vexdb_ef_search 40; SELECT id FROM items ORDER BY l2_distance(vec, [0.5, 0.5, ...]::FLOAT[128]) LIMIT 10;这里有个惊喜你不需要写任何特殊查询语法。优化器会自动识别ORDER BY 距离函数(vec, 查询向量) LIMIT k这种模式把它改写成图索引扫描。用EXPLAIN就能看到计划中的VEXDB_INDEX_SCAN节点——这是验证索引真正生效的最直接方法。还有一个对新手很友好的设计小表自动走精确扫描。当表行数不超过vexdb_brute_force_threshold默认 10000 行时优化器会跳过图索引直接精确计算100% 召回、零索引开销表大了才自动切换到 ANN 路径毫秒级响应。也就是说测试阶段和上生产阶段用的是同一条 SQL无需任何修改。上图这类场景就是典型应用把图片过一遍嵌入模型得到向量存入FLOAT[N]列建好GRAPH_INDEX后以图搜图、找相似照片都是一条距离排序查询的事项目里的 iOS 示例就包含图片向量检索演示见 examples/ios/VexDBLiteDemo/。进阶调优ef_search、量化与元数据过滤调搜索宽度vexdb_ef_search是查询时搜索宽度的旋钮默认 40。召回不够就调大到 100~200追求高 QPS 就调小到 10SET vexdb_ef_search 200; -- 高召回元数据过滤把标量列一起放进索引就能在图索引内部做 pre-filter比如USING GRAPH_INDEX (vec, category, status)然后直接WHERE category book ORDER BY l2_distance(...) LIMIT 10。PQ 量化省内存把向量切成pq_m段分别量化索引侧压缩到pq_m字节。适合内存紧张的大规模场景要求维度能被pq_m整除如 dim128 / pq_m16CREATE INDEX idx_vec_pq ON items USING GRAPH_INDEX (vec) WITH (quantizer pq, pq_m 16, memory_mode compact);别忘了持久化LOAD扩展不会随数据库保存每次打开.duckdb文件都要重新执行一次LOAD而索引本身通过 DuckDB 标准序列化持久化重启后无需重建。常见问题速查must be signed报错→ 未开启allow_unsigned_extensions先SET再LOADCould not load library→ DuckDB 版本与扩展构建版本不一致用SELECT version();核对EXPLAIN 里是 SEQ_SCAN 而不是 VEXDB_INDEX_SCAN→ 大概率是表太小走了精确扫描默认 1 万行以下调试时可SET vexdb_brute_force_threshold 0;强制走图索引结果和暴力扫描不完全一样→ 近似搜索召回 100% 是预期行为调高vexdb_ef_search即可更多排障细节和完整参数表参考 vexdb_duckdb/README.md 的故障排查章节以及 DuckDB 端的回归测试用例 tests/spec/duckdb/index/graph_index_basic.yaml。小结给 DuckDB 装上向量搜索能力只需要三步加载 VexDB-Lite 扩展 → 建FLOAT[N]表 →CREATE INDEX ... USING GRAPH_INDEX。之后所有ORDER BY 距离 LIMIT k查询都会自动走图索引还能按需叠加 PQ 量化、元数据过滤和ef_search调优。无论是给分析库加语义检索、构建嵌入式 RAG还是本地以图搜图这套一条 LOAD 命令起步的方案都足够轻量。项目支持文档见 documentation/动手试试吧 【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-Lite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表