lakebase_text

Important

這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。

lakebase_text 擴充功能透過索引類型為 Lakebase lakebase_bm25 新增了 BM25 全文搜尋功能。 它相容於 PostgreSQL 的標準 tsvector 型別與查詢運算子。

Install

首先,在專案設定 中啟用 Lakebase Search 。 然後安裝擴充功能:

CREATE EXTENSION IF NOT EXISTS lakebase_text;

PostgreSQL 內建的全文搜尋會使用 GIN 索引並 ts_rank 進行相關性評分。 ts_rank 不使用全球語料庫統計,因此隨著資料成長,分數會下降。 lakebase_text 在兩方面改進了這個問題:

  • BM25 排名 同時考量詞彙頻率、文件長度及語料庫整體統計,產生比 TF-IDF 更精確的相關性分數。
  • Top-K pushdown 使用 Block-Max WAND 只回傳索引中最相關的 K 個結果,而非評分結果集中的每一個匹配。

快速入門

插入資料後建立 lakebase_bm25 索引。 BM25 在索引建置時計算語料庫範圍的統計數據,而非增量計算,因此索引必須建立在填入資料表上。

-- Create a table with a generated tsvector column
CREATE TABLE documents (
  id      SERIAL PRIMARY KEY,
  passage TEXT,
  vector  TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', passage)) STORED
);

-- Insert data before building the BM25 index
INSERT INTO documents (passage) VALUES
  ('Postgres is a powerful open-source relational database.'),
  ('Vector search finds semantically similar results.'),
  ('BM25 ranking improves full-text search relevance scores.');

-- Create the BM25 index on the populated table
CREATE INDEX documents_passage_bm25 ON documents USING lakebase_bm25 (vector);

-- Query: lower score means more relevant
SELECT id, passage,
  vector <@> to_bm25query(to_tsvector('english', 'database'), 'documents_passage_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;

操作員 <@> 回傳負值的BM25分數。 依分數由高到低排序,先返回最相關的結果。

從同步資料表填充

如果你是從 Unity Catalog 載入原始碼文字,而不是直接插入,同步後的資料表可以在同步時產生tsvector欄位,並準備好在同步完成後立即索引。lakebase_bm25 請參閱 湖底搜尋的自訂類型映射

保持索引的準確性

BM25 統計數據在索引建置時計算並更新。VACUUM 大多數工作量中,常規 VACUUM 會計師會保持分數準確。 在大量新資料批量載入後,請手動執行 VACUUM :

VACUUM documents;

會話層級 GUC

參數 類型 Default Description
lakebase_bm25.default_limit 整數 1000 索引回傳的最大結果數。
lakebase_bm25.prefilter boolean false true時,會在 WHERE 計算 BM25 分數前評估條件。 當濾網去除多排且評估成本低時使用。
lakebase_bm25.enable_scan boolean true 設定為 強制 false 順序掃描,繞過索引。 對測試很有用。
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

當兩者同時設定時,GUC 優先於索引儲存參數。

索引儲存參數

在索引建立時或以 ALTER INDEX

參數 類型 Default 範圍 Description
k1 real 1.2 1.2 到 2.0 詞頻飽和。 較高的數值會讓重複的詞語權重增加。
b real 0.75 0.0 到 1.0 文件長度正規化。 0.0 關閉長度正規化; 1.0 套用完整正規化。
default_limit 整數 1000 1 至 65535 當 GUC 會話未設定時,備用限制。
prefilter boolean false N/A 當會話 GUC 未設定時,請使用備用預濾器設定。
-- Set parameters at index creation (use a new name — the Quick start already created documents_passage_bm25)
CREATE INDEX documents_passage_bm25_tuned ON documents USING lakebase_bm25 (vector)
  WITH (default_limit = 20, k1 = 1.5);

-- Update parameters on an existing index
ALTER INDEX documents_passage_bm25_tuned SET (default_limit = 50);

API 參考資料

型別

bm25query_tsvector: 將查詢 tsvector 與目標索引識別碼結合。 用作 的 <@>右運算元。

運營商

Operator Signature Returns Description
<@> tsvector <@> bm25query_tsvector double precision 回傳負值的BM25分數。 依序向上排序以獲得最相關的結果。

Functions

功能 Returns Description
to_bm25query(query tsvector, index regclass) bm25query_tsvector 從 與 tsvector 索引的物件識別碼建構 BM25 查詢物件。

運算子類別

Class 預設值為 Description
tsvector_bm25_ops tsvector tsvector 欄位映射給 <@> 操作員,用於 BM25 計分。 這是 的 tsvector 預設運算子類別,且 lakebase_bm25;你不需要明確指定。

下一步