メインコンテンツまでスキップ

湖底テキスト

備考

ベータ版

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

lakebase_text拡張機能は、lakebase_bm25インデックスタイプを介してLakebaseにBM25全文検索を追加します。PostgreSQLの標準tsvector型およびクエリ演算子と互換性があります。

インストール

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

SQL
CREATE EXTENSION IF NOT EXISTS lakebase_text;

標準のGIN全文検索ではなくlakebase_textを使用する理由

PostgreSQL の組み込み全文検索は、関連性スコアリングに GIN インデックスとts_rank使用します。ts_rankグローバルコーパス統計を使用しないため、データが増えるにつれてスコアが低下します。lakebase_textこれを2つの点で改善しています。

  • BM25ランキングは 、単語の出現頻度、文書の長さ、およびコーパス全体の統計情報を同時に考慮するため、TF-IDFよりも正確な関連性スコアを生成します。
  • Top-K pushdown はBlock-Max WANDを使用して、インデックスからK個の最も関連性の高い結果のみを返し、結果セット内のすべてのマッチをスコアリングしません。

クイックスタート

データ挿入後にlakebase_bm25インデックスを作成します。BM25は、インデックス作成時にコーパス全体の統計情報を計算するため、増分的に計算するのではなく、インデックスはデータが格納されたテーブル上に作成する必要があります。

SQL
-- 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スコアを返します。スコアを昇順で並べ替えることにより、最も関連性の高い結果が最初に返されます。

インデックスの精度を維持する

BM25統計は、インデックス構築時に計算され、VACUUMによって更新されます。ほとんどのワークロードで、定期的なVACUUMはスコアを正確に保ちます。大量の新しいデータを一括ロードした後、手動でVACUUMを実行してください。

SQL
VACUUM documents;

Tune 検索

セッションレベルGUC

パラメーター

Type

デフォルト

説明

lakebase_bm25.default_limit

整数

1000

インデックスから返される結果の最大数。

lakebase_bm25.prefilter

boolean

false

trueの場合、BM25 スコアを計算する前にWHERE条件を評価します。フィルターによって多くの行が除外され、かつ評価コストが低い場合に使用します。

lakebase_bm25.enable_scan

boolean

true

インデックスをバイパスしてシーケンシャルスキャンを強制するには、falseに設定します。テストに便利です。

SQL
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

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

インデックスストレージパラメーター

これらのオプションは、インデックス作成時またはALTER INDEXで設定します:

パラメーター

Type

デフォルト

範囲

説明

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が設定されていない場合のフォールバックプリフィルタ設定。

SQL
-- Set parameters at index creation
CREATE INDEX documents_passage_bm25 ON documents USING lakebase_bm25 (vector)
WITH (default_limit = 20, k1 = 1.5);

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

APIリファレンス

タイプ

bm25query_tsvectorクエリtsvectorとターゲットインデックス識別子を組み合わせます。<@> の右の被演算子として使用されます。

オペレーター

オペレーター

署名

戻り値

説明

<@>

tsvector <@> bm25query_tsvector

double precision

負のBM25スコアを返します。最も関連性の高い結果を最初に表示するには、昇順で並べ替えてください。

機能

関数

戻り値

説明

to_bm25query(query tsvector, index regclass)

bm25query_tsvector

tsvectorとインデックスのオブジェクト識別子からBM25クエリオブジェクトを構築します。

演算子クラス

クラス

デフォルト

説明

tsvector_bm25_ops

tsvector

tsvector 列を <@> オペレーターにマッピングしてBM25スコアリングを実行します。これはtsvectorlakebase_bm25のデフォルトのオペレータークラスです。明示的に指定する必要はありません。

次のステップ