共用方式為


vector_search函式

適用於:核取記號為「是」 Databricks SQL

重要

這項功能處於公開預覽狀態

vector_search() 函式可讓你使用 SQL 查詢 Mosaic AI 向量搜尋索引。

需求

  • 這個函式不適用於傳統 SQL 倉儲。
  • 如需詳細資訊,請參閱 Databricks SQL 價格頁面
  • 此函式可在支持馬賽克 AI 向量搜尋 的 區域中使用。

語法

在 Databricks Runtime 15.3 和更新版本中,您可以使用 query_textquery_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)

  • indexSTRING 常數,相同工作區中,用於叫用之現有向量搜尋索引的完整名稱。 定義器必須具有索引的 「選取」許可權。
  • 使用下列其中一項來指定要在索引中搜尋的表示式:
    • 針對 Databricks Runtime 15.3 或更新版本,請使用 query_text,在 Delta Sync Index的內嵌源數據行中搜尋特定文字字元串。 查詢必須是字串的 STRING 表達式,才能在索引中搜尋。
    • 針對 Databricks Runtime 15.3 或更新版本,請使用 query_vector 來搜尋 Delta同步索引中的嵌入向量欄,以找到特定的向量。 若要使用自我管理的向量搜尋 Delta 同步索引,則需要此參數。 查詢必須是 ARRAY<FLOAT>ARRAY<DOUBLE>或內嵌向量的 ARRAY<DECIMAL(_, _)> 表示式,才能在索引中搜尋。
    • 針對 Databricks Runtime 15.2 或以下版本,請使用 query 指定要在索引中搜尋的字串。
  • num_results (選擇性):整數常數,要傳回的記錄數目上限。 預設為 10。

傳回

索引中最佳相符記錄的表格。 索引的所有數據行都包含在內。

範例

下列各節顯示不同索引搜尋的 SQL 查詢範例。

帶有嵌入源數據列的索引上的文字查詢

搜尋產品 SKU 的索引,依名稱尋找類似的產品。 下列範例使用的 query_text 僅在 Databricks Runtime 15.3 和更高版本中受支持。 針對 Databricks Runtime 15.2 和以下版本,請使用 query,而不是使用 query_text


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
識別碼 產品名稱
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

帶有嵌入源數據列的索引上的文字查詢

使用預先計算的嵌入表示搜尋影像索引,以透過嵌入表示來尋找類似的影像。 下列範例使用的 query_vector 僅在 Databricks Runtime 15.3 和更高版本中受支持。 針對 Databricks Runtime 15.2 和以下版本,請使用 query,而不是使用 query_vector


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 影像名稱 圖像嵌入
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 search.image_name 搜尋圖片嵌入
[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_jsoncolumns
  • 不支援 num_results 大於 100 的向量搜尋。
  • 沒有來源資料表讀取權限的使用者無法使用 vector_search()
  • 使用 vector_search()不支援混合式關鍵詞相似性搜尋。
  • vector_search 無法搭配使用基礎模型 API 佈建之輸送量的模型服務端點使用。