搜索快捷键 cmd + k | ctrl + k
faiss

提供从 DuckDB 访问 faiss 索引的功能。

安装和加载

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