次の方法で共有


vector_search 関数

適用対象: Databricks SQL

重要

この機能はパブリック プレビュー段階にあります。

vector_search() 関数を使用すると、SQL を使用して Mosaic AI ベクトル検索インデックスでクエリを実行できます。

要件

構文

Databricks Runtime 15.3 以降では、query_text または query_vector を使用して、インデックス内で検索する対象を指定できます。

SELECT * FROM vector_search(
  index,
  { query_text | query_vector },
  [ num_results ]
)

Databricks Runtime 15.2 以下では、query を使用して、インデックス内で検索する対象を指定できます。

SELECT * FROM vector_search(
  index, query, num_results
)

引数

vector_search(index => indexName, query_text => queryText) のように、すべての引数を名前で渡す必要があります。

  • index: STRING 定数。呼び出し用の同じワークスペース内の既存のベクトル検索インデックスの完全修飾名。 定義者には、インデックスに対する “Select” の権限が必要です。
  • インデックス内で検索する式を指定するには、次のいずれかを使用します。
    • Databricks Runtime 15.3 以降では、query_text を使用して、差分同期インデックスの埋め込みソース列で特定の文字列を検索します。 クエリは、インデックス内で検索する文字列の STRING 式である必要があります。
    • Databricks Runtime 15.3 以降では、query_vector を使用して、デルタ同期インデックスの埋め込みベクター列で特定のベクターを検索します。 この引数は、自己管理ベクトルを使用して差分同期インデックスを検索するために必要です。 クエリは、インデックス内で検索する埋め込みベクターの ARRAY<FLOAT>ARRAY<DOUBLE>、または ARRAY<DECIMAL(_, _)> 式である必要があります。
    • Databricks Runtime 15.2 以下では、query を使用して、インデックス内で検索する文字列を指定します。
  • num_results (オプション): 整数定数、返すレコードの最大数。 既定値は 10 です。

返品

インデックスから一致する上位のレコードのテーブル。 インデックスのすべての列が含まれます。

次のセクションでは、さまざまなインデックス検索に対する SQL クエリの例を示します。

ソース列を埋め込むインデックスに対するテキスト クエリ

製品 SKU のインデックスを検索して、類似する製品を名前で検索します。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_text を使用しています。 Databricks Runtime 15.2 以下では、query_textの代わりに query を使用します。


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID 製品名
10 iPhone
20 iPhone SE

次の例では、LATERAL サブクエリを使用して複数の用語を同時に検索します。


SELECT
  query_txt,
  query_id,
  search.*
FROM
  query_table,
  LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => query_txt, num_results => 2)
  ) as search
query_txt query_id search.id search.product_name
iphone 1 10 iPhone 10
iphone 1 20 iPhone SE
pixel 8 2 30 Pixel 8
pixel 8 2 40 Pixel 8a

ソース列を埋め込むインデックスに対するテキスト クエリ

事前に計算された埋め込みを使用して画像のインデックスを検索し、埋め込みによって同様の画像を見つけます。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_vector を使用しています。 Databricks Runtime 15.2 以下では、query_vectorの代わりに query を使用します。


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45, -0.35, 0.78, 0.22), num_results => 3)

SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45F, -0.35F, 0.78F, 0.22F), num_results => 3)

SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45D, -0.35D, 0.78D, 0.22D), num_results => 3)
id image_name image_embedding
28 horse.jpg [0.46, -0.34, 0.77, 0.21]
27 donkey.jpg [0.44, -0.36, 0.79, 0.23]
5 elk.jpg [0.23, -0.44, 0.77, 0.80]

次の例では、LATERAL サブクエリを使用して複数の用語を同時に検索します。


SELECT
  query_embedding,
  search.*
FROM
  query_table,
  LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => image_embedding, num_results => 1)
  ) as search
クエリ埋め込み search.id 画像名を検索 検索画像埋め込み
[0.45, -0.35, 0.78, 0.22] 27 donkey.jpg [0.46, -0.34, 0.77, 0.21]
[0.14, 0.29, 0.30, -0.90] 3 landscape.jpg [0.15, 0.30, 0.31, -0.91]
[0.23, -0.44, 0.77, 0.80] 10 golden_gate_bridge.jpg [0.28, -0.40, 0.23, 0.81]
[0.88, 0.88, 0.88, 0.88] 44 blank.jpg [0.88, 0.88, 0.88, 0.88]

制限事項

プレビュー期間中は、次の制限事項が適用されます:

  • DIRECT_ACCESS インデックスの種類に対するクエリはサポートされていません。
  • 入力パラメーター filters_json または columns はサポートされていません。
  • num_results は 100 より大きいベクトル検索はサポートされていません。
  • ソース テーブルに対する READ アクセス権を持たないユーザーは、vector_search()を使用できません。
  • ハイブリッド キーワード類似性検索は、vector_search()を使用してサポートされていません。
  • vector_search は、Foundation Model API のプロビジョニングされたスループットを使用してエンドポイントにサービスを提供するモデルでは使用できません。