提供从 DuckDB 访问 faiss 索引的功能。
维护者:JAicewizard, arjenpdevries
安装和加载
INSTALL faiss FROM community;
LOAD faiss;
示例
-- Generate semi-random input data and queries
-- Note that the dimensionality of our data will be 5
CREATE TABLE input AS SELECT i AS id, apply(generate_series(1, 5), j-> CAST(hash(i*1000+j) AS FLOAT)/18446744073709551615) AS data FROM generate_series(1, 1000) s(i);
CREATE TABLE queries AS SELECT i AS id, apply(generate_series(1, 5), j-> CAST(hash(i*1000+j+8047329823) AS FLOAT)/18446744073709551615) AS data FROM generate_series(1, 10) s(i);
-- Create the index and insert data into it
CALL FAISS_CREATE('name', 5, 'IDMap,HNSW32');
CALL FAISS_ADD((SELECT id, data FROM input), 'name');
-- On linux, with cuda, we can move the index to the GPU
-- CALL FAISS_TO_GPU('name', 0);
-- Get 10 results with uneven id
SELECT id, UNNEST(FAISS_SEARCH_FILTER('name', 10, data, 'id%2==1', 'rowid', 'input')) FROM queries;
-- Get 10 results with even id
SELECT id, UNNEST(FAISS_SEARCH_FILTER('name', 10, data, 'id%2==0', 'rowid', 'input')) FROM queries;
-- Get 10 results
SELECT id, UNNEST(FAISS_SEARCH('name', 10, data)) FROM queries;
关于 faiss
FAISS 扩展允许 DuckDB 用户在 faiss 中存储向量数据并查询这些数据,从而使可靠的向量搜索更易于访问。在所有 Linux 平台上,此扩展也支持 GPU 索引,您可以使用 CALL FAISS_MOVE_GPU({index_name}, {gpu number})
将受支持的索引移动到 GPU。目前仅支持 CUDA,请注意,GPU 支持未来可能会被拆分为一个独立的扩展。
某些(大多数)索引不支持 GPU,但这个问题很容易解决。请在我们的仓库中提交一个 issue 以便解决此问题!
新增函数
函数名称 | 函数类型 | 描述 | 备注 | 示例 |
---|---|---|---|---|
__faiss_create_mask | 表 | NULL | NULL | |
faiss_add | 表 | NULL | NULL | |
faiss_create | 表 | NULL | NULL | |
faiss_create_params | 表 | NULL | NULL | |
faiss_destroy | 表 | NULL | NULL | |
faiss_load | 表 | NULL | NULL | |
faiss_manual_train | 表 | NULL | NULL | |
faiss_save | 表 | NULL | NULL | |
faiss_search | 标量 | NULL | NULL | |
faiss_search_filter | 标量 | NULL | NULL | |
faiss_search_filter_set | 标量 | NULL | NULL | |
faiss_to_gpu | 表 | NULL | NULL |