lakebase_text

重要

この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

lakebase_text拡張機能は、lakebase_bm25インデックスの種類を使用して、BM25 フルテキスト検索を Lakebase に追加します。 PostgreSQL の標準の tsvector 型およびクエリ演算子と互換性があります。

Install

まず、プロジェクト設定で Lakebase Search を有効にします 。 次に、拡張機能をインストールします。

CREATE EXTENSION IF NOT EXISTS lakebase_text;

PostgreSQL の組み込みのフルテキスト検索では、関連性スコア付けに GIN インデックスと ts_rank が使用されます。 ts_rank ではグローバル コーパス統計が使用されないため、データの増加に合わせてスコアが低下します。 lakebase_text は、次の 2 つの方法で改善されます。

  • BM25 ランク付 けでは、用語の頻度、ドキュメントの長さ、コーパス全体の統計が同時に考慮され、TF-IDF よりも正確な関連性スコアが生成されます。
  • Top-K プッシュダウン では、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 説明
lakebase_bm25.default_limit 整数 1000 インデックスから返される結果の最大数。
lakebase_bm25.prefilter boolean false trueすると、BM25 スコアを計算する前にWHERE条件を評価します。 フィルターによって多くの行が削除され、評価が低い場合に使用します。
lakebase_bm25.enable_scan boolean true インデックスをバイパスしてシーケンシャル スキャンを強制するには、 false に設定します。 テストに役立ちます。
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

両方が設定されている場合、GUC はインデックス ストレージ パラメーターよりも優先されます。

ストレージ パラメーターのインデックスを作成する

インデックス作成時または ALTER INDEXで、次のオプションを設定します。

パラメーター タイプ Default 範囲 説明
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 返品 説明
<@> tsvector <@> bm25query_tsvector double precision 負の BM25 スコアを返します。 最も関連性の高い結果を最初に取得するには、昇順で並べ替えます。

Functions

Function 返品 説明
to_bm25query(query tsvector, index regclass) bm25query_tsvector tsvectorとインデックスのオブジェクト識別子から BM25 クエリ オブジェクトを構築します。

演算子クラス

クラス 既定値 説明
tsvector_bm25_ops tsvector tsvector列を BM25 スコアリングの<@>演算子にマップします。 これは、tsvectorを使用するlakebase_bm25の既定の演算子クラスです。明示的に指定する必要はありません。

次のステップ