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

Lakebase Search

備考

ベータ版

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

Lakebase Searchは、Lakebase Autoscalingプロジェクトにハイブリッドベクトル検索とキーワード検索の機能を追加します。プロジェクト設定で一度有効にしてから、 lakebase_vectorlakebase_text Postgres拡張機能をインストールして、検索機能の構築を開始してください。

仕組み

Lakebase Search は、次の 2 つの Postgres 拡張機能に基づいて構築されています。

  • **lakebase_vector**は、近似最近傍(ANN)ベクトル検索を lakebase_annインデックスタイプ経由で追加します。pgvectorにそのまま使用できるコンパニオンです。同じベクトル型、距離演算子、クエリ構文が修正なしで機能します。内部的には、RaBitQ量子化を伴うIVFパーティショニングを使用しており、これにより、単一のインデックスで10億を超えるベクトルをサポートし、HNSWよりも最大50~100倍高速に構築できます。インデックスはストレージにバックアップされており、ウォームアップなしでスケールゼロを存続します。

  • **lakebase_text** lakebase_bm25は、 インデックスタイプを介してBM25全文検索を追加します。PostgreSQLの標準tsvector型およびクエリ演算子と互換性があります。BM25ランキングは、単語の出現頻度、ドキュメント長、およびコーパス全体の統計を同時に考慮します。Top-Kプッシュダウン (Block-Max WAND) は、すべてのマッチをスコアリングする代わりに、インデックスからK個の最も関連性の高い結果のみを取得します。

要件

  • Postgres 16以降
  • プロジェクトでLakebase Searchを有効にすると、元に戻すことはできません。

Lakebase Search を有効にする

  1. Lakebaseプロジェクト設定で、左側のナビゲーションで**Lakebase**をクリックします。
  2. Lakebase Searchを有効にする をクリックします。
警告

Lakebase Search の有効化:

  • プロジェクト内のすべてのコンピュートを再起動し、アクティブな接続をすべて切断します。
  • lakebase_vectorlakebase_text拡張機能をインストール可能にします
  • 一度有効にすると無効にすることはできません

拡張機能をインストールする

Lakebase Search を有効にした後、データベースに拡張機能をインストールします。

SQL
-- Required: vector search (CASCADE installs pgvector as a dependency)
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

-- Required: BM25 full-text search
CREATE EXTENSION IF NOT EXISTS lakebase_text;

使い始める

次の例では、ベクトル列と全文検索列の両方を含むdocumentsテーブルを作成し、その後、ベクトルとキーワードのクエリを実行します:

SQL
-- Create a table with a vector column and a tsvector column
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL,
embedding VECTOR(3),
body_tsv TSVECTOR
);

-- Create a vector search index
CREATE INDEX ON documents USING lakebase_ann (embedding vector_cosine_ops);

-- Insert sample data and populate the tsvector column
INSERT INTO documents (title, body, embedding, body_tsv) VALUES
('Postgres overview', 'Postgres is an open-source relational database.', '[0.1, 0.2, 0.3]', to_tsvector('english', 'Postgres is an open-source relational database.')),
('Vector search guide', 'Vector search finds semantically similar results.', '[0.4, 0.5, 0.6]', to_tsvector('english', 'Vector search finds semantically similar results.')),
('Full-text search', 'BM25 ranking improves keyword search relevance.', '[0.7, 0.8, 0.9]', to_tsvector('english', 'BM25 ranking improves keyword search relevance.'));

-- Build the BM25 index after inserting data
-- BM25 computes corpus statistics at build time, not incrementally
CREATE INDEX documents_body_bm25 ON documents USING lakebase_bm25 (body_tsv);

-- Vector similarity search
SELECT id, title
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, 0.3]'
LIMIT 5;

-- BM25 keyword search (lower score = more relevant)
SELECT id, title,
body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;

拡張機能

拡張機能

目的

インデックスタイプ

湖底ベクトル

ANNベクトル検索、pgvector互換

lakebase_ann

Lakebaseテキスト

BM25全文検索、FTS互換

lakebase_bm25