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

lakebase_vector

備考

ベータ版

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

lakebase_vector 拡張は lakebase_ann インデックスタイプを通じてLakebaseにapproximate nearest-neighbor (ANN) ベクトル検索を追加します。これはpgvectorのそのまま使えるコンパニオンです。同じベクトルタイプ、距離演算子、クエリー構文は修正なしで機能します。

インストール

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

SQL
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

CASCADE キーワードは、pgvector を依存関係として自動的にインストールします。

クイックスタート

SQL
-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));

-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);

-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);

-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

インデックスを設定

インデックス作成時に build_mode を設定して、精度と速度のトレードオフを制御します。

  • standard (デフォルト):recallに最適化します。ほとんどのワークロードに使用します。
  • fast再現率が低い場合は、より高速にビルドされます。検索品質よりもビルド時間が重要な場合に使用します。
SQL
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');

インデックスを同時実行で構築する

テーブルをロックせずに構築するにはCREATE INDEX CONCURRENTLY使用し、ダウンタイムなしで再構築するにはREINDEX CONCURRENTLY使用します。

SQL
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);

REINDEX INDEX CONCURRENTLY items_embedding_ann;

検索精度を調整する

チューニングする前に、lakebase_ann_index_info(index_name)を呼び出してインデックスのlistsdefault_probesdefault_epsilonの値を取得します。

クエリ時にlakebase_ann.probesを設定して、精度と速度のトレードオフを制御します。値が大きいほど再現率は向上しますが、クエリは遅くなります。

lakebase_ann.probesを設定する前に、lakebase_ann_index_infoを呼び出してlists配列を検索します。リストエントリごとに1つのプローブ値を設定します:

lists インデックス情報から

probes 設定する

[] (空)

[222]

'22'

[3333, 33333]

'33, 333'

注記

lakebase_ann.probesパラメーターは、listsのエントリごとに1つの値を必要とします。lists配列が空の場合(インデックスビルダーがIVFパーティションを作成しない小さなテーブルで発生します)、probesを設定しないでください。lists配列が空のときに値を設定するとエラーが発生します。データセットが十分に大きくなり、インデックスビルダーがパーティション分割できるようになると、IVFパーティションが表示されます。

SQL
-- Check your index's lists length first
SELECT lakebase_ann_index_info('items_embedding_ann');

-- Set probes matching the lists array (example: one partition)
SET lakebase_ann.probes TO '22';
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;

lakebase_ann.epsilon 再ランキングのマージンを制御します。デフォルト値の1.9は、ほとんどのワークロードで問題なく機能します。

SQL
SET lakebase_ann.epsilon TO '1.5';

オペレータークラス

距離メトリクス

オペレータークラス

クエリ演算子

L2 (ユークリッド)

vector_l2_ops

<->

負の内積

vector_ip_ops

<#>

コサイン類似度

vector_cosine_ops

<=>

エンベディングのトレーニング方法に合ったオペレータークラスを選択し、インデックスとクエリに同じメトリクスを使用してください。

  • vector_cosine_ops (<=>) はコサイン類似度です。ほとんどのテキスト埋め込みに使用してください。これは最も一般的な選択肢です。
  • vector_l2_ops (<->) はユークリッド (L2) 距離です。絶対的な空間距離が重要であり、ベクトルが正規化されていない場合に使用してください。
  • vector_ip_ops<#>)は負の内積です。ベクトルが単位長に事前正規化されている場合に使用します。単位ベクトルでは、内積はコサイン類似度に等しく、通常、より高速です。

インデックス オプション リファレンス

オプション

Type

デフォルト

説明

build_mode

string

'standard'

インデックス構築時の精度と速度のトレードオフを制御します。'standard' は再現率を最適化し、'fast' は再現率が低い場合はより高速にビルドされます。

GUC参照

パラメーター

Type

デフォルト

説明

lakebase_ann.probes

整数配列

(未設定)

listsの各エントリにつき1つの値を持つ、パーティションごとのプローブカウントの配列です。値が高いほど、クエリ速度が低下する代わりにリコールが向上します。設定する値の数を決定するために、listsの長さに応じてlakebase_ann_index_infoを確認してください。

lakebase_ann.epsilon

float

1.9

順位付けのマージンを再調整します。有効範囲: 0.04.0

ユーティリティ関数

関数

戻り値

説明

lakebase_ann_prewarm(regclass)

無効

最初のクエリにおけるコールドスタート時の遅延を解消するため、インデックスをメモリにロードします。

lakebase_ann_index_info(regclass)

TEXT

listsdefault_probesdefault_epsilon を含むインデックスメタデータをテキストとして返します。

次のステップ