Important
這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。
擴充 lakebase_vector 功能透過索引類型為 Lakebase lakebase_ann 新增了近似最近鄰(ANN)向量搜尋功能。 它是 pgvector 的可直接補充:相同的向量類型、距離運算子和查詢語法都能使用,且不需修改。
Install
首先,在專案設定 中啟用 Lakebase Search 。 然後安裝擴充功能:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
關鍵字 CASCADE 會 pgvector 自動安裝為相依項目。
快速入門
-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));
-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);
-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);
-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
從同步資料表填充
如果你是從 Unity Catalog 載入嵌入,而不是直接插入, 同步表格 可以在同步時將 lakehouse 嵌入欄位直接映射到 Postgres vector 欄位,而不是預設 JSONB 的映射。 請參閱 湖底搜尋的自訂類型映射。
設定索引
在索引建立時設定 build_mode 以控制準確度與速度的權衡:
-
standard(預設):優化召回。 大多數工作負載都用。 -
fast:在較低回憶率下,累積速度更快。 當建置時間比搜尋品質更重要時使用。
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');
同時進行建置索引
用 CREATE INDEX CONCURRENTLY 來建造而不鎖桌子,然後 REINDEX CONCURRENTLY 再用來無空檔重建:
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
調音搜尋準確度
調整前,先呼叫lakebase_ann_index_info(index_name)取得索引、 listsdefault_probes、 default_epsilon 和 數值。
在查詢時設定 lakebase_ann.probes ,以控制準確度與速度的權衡。 較高的值能提升回憶但查詢速度較慢。
在設定 lakebase_ann.probes前,先呼叫 lakebase_ann_index_info 找你的 lists 陣列。 為每個清單項目設定一個探測值:
lists 資料來源:索引資訊 |
probes 設定 |
|---|---|
[] (空的) |
|
[222] |
'22' |
[3333, 33333] |
'33, 333' |
Note
該 lakebase_ann.probes 參數在 中 lists每個元素中需要一個值。 當 lists 陣列是空的(這種情況發生在索引建構器沒有建立 IVF 分割區的小資料表上),不要設定 probes。 當 lists 陣列為空時設定值會產生錯誤。 當資料集足夠大,索引建構器可以分割時,IVF 分割區就會出現。
-- Check your index's lists length first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- Set probes matching the lists array (example: one partition)
SET lakebase_ann.probes TO '22';
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;
lakebase_ann.epsilon 控制重新排名的幅度。 預設值 對 1.9 大多數工作負載來說運作良好。
SET lakebase_ann.epsilon TO '1.5';
運算子類別
| 距離度量 | 操作員類別 | 查詢運算子 |
|---|---|---|
| L2(歐幾里得) | vector_l2_ops |
<-> |
| 負內積 | vector_ip_ops |
<#> |
| 餘弦相似性 | vector_cosine_ops |
<=> |
選擇與你嵌入訓練方式相符的運算子類別,並使用相同的指標作為索引和查詢:
-
vector_cosine_ops(<=>) 是餘弦相似度。 大多數文字嵌入都用它。 這是最常見的選擇。 -
vector_l2_ops(<->) 是歐幾里得(L2)距離。 當絕對空間距離很重要且向量未正規化時,才會用它。 -
vector_ip_ops(<#>) 是負內積。 當向量預正規化為單位長度時使用。 對於單位向量,內積等於餘弦相似度,通常速度更快。
索引選項參考
| Option | 類型 | 預設 | Description |
|---|---|---|---|
build_mode |
字串 | 'standard' |
控制指數組裝時的準確度與速度權衡。
'standard' 優化回憶; 'fast' 用較低的召回速度快速累積。 |
GUC 參考
| 參數 | 類型 | 預設 | Description |
|---|---|---|---|
lakebase_ann.probes |
整數[] | (未設定) | 每個分割探測計數陣列,每個項目一個值。lists 較高的值能提升回憶性,但代價是查詢速度下降。 檢查lakebase_ann_index_infolists長度來決定要設定多少數值。 |
lakebase_ann.epsilon |
float | 1.9 |
重新排序差距。 有效範圍: 0.0 到 4.0。 |
公用程式函數
| 功能 | Returns | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
無效 | 在第一次查詢時將索引載入記憶體,消除冷啟動延遲。 |
lakebase_ann_index_info(regclass) |
收發簡訊 | 回傳索引中繼資料為文字,包括 lists、、 default_probes和 default_epsilon。 |