湖底テキスト
ベータ版
この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
lakebase_text拡張機能は、lakebase_bm25インデックスタイプを介してLakebaseにBM25全文検索を追加します。PostgreSQLの標準tsvector型およびクエリ演算子と互換性があります。
インストール
まず、プロジェクト設定でLakebase Searchを有効にしてください。次に、拡張機能をインストールします。
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は、インデックス作成時にコーパス全体の統計情報を計算するため、増分的に計算するのではなく、インデックスはデータが格納されたテーブル上に作成する必要があります。
-- 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を実行してください。
VACUUM documents;
Tune 検索
セッションレベルGUC
パラメーター | Type | デフォルト | 説明 |
|---|---|---|---|
| 整数 |
| インデックスから返される結果の最大数。 |
| boolean |
|
|
| boolean |
| インデックスをバイパスしてシーケンシャルスキャンを強制するには、 |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
GUCは、両方が設定されている場合、インデックスストレージパラメーターよりも優先されます。
インデックスストレージパラメーター
これらのオプションは、インデックス作成時またはALTER INDEXで設定します:
パラメーター | Type | デフォルト | 範囲 | 説明 |
|---|---|---|---|---|
| real |
| 1.2~2.0 | 用語頻度飽和。値が大きいほど、繰り返される用語により重みが与えられます。 |
| real |
| 0.0〜1.0 | ドキュメント長正規化。 |
| 整数 |
| 1~65535 | セッションGUCが設定されていない場合のフォールバック制限。 |
| boolean |
| N/A | セッションGUCが設定されていない場合のフォールバックプリフィルタ設定。 |
-- 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とターゲットインデックス識別子を組み合わせます。<@> の右の被演算子として使用されます。
オペレーター
オペレーター | 署名 | 戻り値 | 説明 |
|---|---|---|---|
|
|
| 負のBM25スコアを返します。最も関連性の高い結果を最初に表示するには、昇順で並べ替えてください。 |
機能
関数 | 戻り値 | 説明 |
|---|---|---|
|
|
|
演算子クラス
クラス | デフォルト | 説明 |
|---|---|---|
|
|
|