我們閱讀並認真看待每一項使用者回饋。
如需查看所有可用限定詞,請參閱我們的說明文件。
一個用於向量相似性搜尋的 DuckDB 擴充套件,支援過濾式 HNSW (ACORN-1) 和 RaBitQ 二進位量化。
上游的 duckdb-vss 擴充套件有兩項限制:
無特殊語法 — 優化器會自動偵測這些模式並使用過濾式 HNSW 搜尋。
對於大維度向量(128+),RaBitQ 可大幅減少索引記憶體:
其他所有功能均相同 — 查詢、過濾、持久化。索引儲存二進位量化向量,並針對原始 F32 向量重新評分候選項目,以獲得精確的排名。
更高的過採樣率 = 更好的召回率,查詢速度略慢。
RaBitQ 10x 的召回率比純 HNSW 更高,因為重新評分階段會使用精確距離進行重新排序。
自行執行基準測試:./build/release/duckdb < benchmarks/rabitq_benchmark.sql
過濾條件在 HNSW 圖遍歷期間使用 ACORN-1 演算法進行評估:
準備好的語句適用於參數化查詢:
當您的向量和中繼資料位於不同的表中時,優化器會將標準的 JOIN 重寫為過濾式 HNSW 搜尋:
優化器會預先掃描中繼資料表以尋找匹配的 JOIN 鍵,建構 ACORN-1 過濾位元組集,並執行單一過濾式 HNSW 搜尋。JOIN 仍保留在計劃中以重新附加中繼資料欄。區域圖修剪會在鍵查找期間跳過不相關的區段。
使用標準 SQL 聚合進行每組頂 K 搜尋:
對於每個不同的群組值,優化器會建構一個每組過濾位元組集,並執行獨立的 ACORN-1 過濾搜尋。這提供了精確的每組召回率 — 無過採樣啟發式方法,無後續過濾。
可與任何群組欄位類型(整數、字串)搭配使用,僅支援單欄 GROUP BY。多欄 GROUP BY 將回退到順序掃描。
返回:索引名稱、表格、度量、維度、計數、容量、記憶體使用量、量化類型、每向量位元組、向量記憶體使用量、層級和每層級統計資料。
索引支援創建後的變更。為獲得最佳效能,請在批量載入資料後創建索引。
刪除是延遲標記的 — 執行 PRAGMA hnsw_compact_index('idx') 以回收空間。
當使用磁碟式資料庫時,索引會在重新啟動後持續存在。完整索引會在檢查點時序列化,並在首次存取時反序列化。
DuckDB 的 ACORN-1 預過濾 HNSW 搜尋