共用方式為


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 常數,在相同工作區中用於調用的現有向量搜尋索引的完整名稱。 定義者必須具有 Select 索引的許可權。
  • 使用下列其中一項來指定要在索引中搜尋的表示式:
    • 針對 Databricks Runtime 15.3 或更新版本,請使用 query_text,在 Delta Sync Index的內嵌源數據行中搜尋特定文字字元串。 查詢必須是字串的 STRING 表達式,才能在索引中搜尋。
    • 針對 Databricks Runtime 15.3 或更新版本,請使用 query_vector 來搜尋 Delta同步索引中的嵌入向量欄,以找到特定的向量。 此引數是使用自我管理向量搜尋差異同步索引的必要參數。 查詢必須是 ARRAY<FLOAT>ARRAY<DOUBLE>或內嵌向量的 ARRAY<DECIMAL(_, _)> 表示式,才能在索引中搜尋。
    • 針對 Databricks Runtime 15.2 或以下版本,請使用 query 指定要在索引中搜尋的字串。
  • num_results (選擇性):整數常數,要傳回的記錄數目上限。 預設為 10。
  • query_type(選用):您要對向量搜尋索引執行的搜尋類型。 如果未明確指定,則預設為。ANN
    • 如果 是 query_typeANN ,則必須指定 或 query_text 才能query_vector執行近似最近鄰搜尋或相似性搜尋。
    • 如果 是 query_typeHYBRID,則 query_text 必須指定。 您可以同時指定 query_text 混合式搜尋的 和 query_vector 。 在此實例中,混合式搜尋是指相似性搜尋和關鍵字搜尋的組合,其中關鍵字搜尋使用文字文字作為目標。

下表摘要說明當您有具有內嵌模型 Delta Sync 索引時,可以使用哪些引數:

query_type query_text query_vector Description
ANN(也稱為近似最近鄰或相似性搜尋)
  • 若要搜尋特定文字字串或向量的相似性,您可以指定 query_text
  • 嵌入可以從 query_text自動計算,並用於相似性搜索,因此無需指定 query_vector
ANN(也稱為近似最近鄰或相似性搜尋) 用於 query_vector 相似性搜尋。
混合式
  • 用於 query_text 關鍵字搜尋。 關鍵字搜尋使用文字作為目標,因此 query_text 是必需的。
  • 嵌入可以從 query_text自動計算,並用於相似性搜索,因此無需指定 query_vector
混合式 用於 query_text 關鍵字搜索和 query_vector 相似性搜索。

下表描述不同的案例,以及當您有沒有內嵌模型 差異同步索引時可以使用的引數:

query_type query_text query_vector Description
ANN (也稱為近似最近鄰或相似性搜尋) 用於query_vector 相似性搜尋。 相似性搜尋需要嵌入向量作為搜尋目標。 因為在此案例中無法使用內嵌模型來計算內嵌向量,所以您必須提供它。
混合式 對於特定文字字串和向量的混合式搜尋,請同時 query_text 指定 和 query_vector

退貨

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

範例

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

混合式搜尋查詢

下列混合式搜尋範例會結合下列搜尋型別,以在向量搜尋索引的文字或中繼資料中尋找提供的字詞:

  • 向量相似性搜尋:尋找 的相似語義 Wi-Fi issues意義。
  • 關鍵字搜尋:在關鍵字索引上尋找 Wi-Fi issues LMP-9R2
SELECT * FROM vector_search(
  index => 'main.support_docs.index',
  query_text => 'Wi-Fi issues LMP-9R2',
  query_type => 'HYBRID',
  num_results => 3)
doc_id title product_code
1,403 Wi-Fi 故障排除指南 — LMP-9R2 LMP-9R2型
1332 LMP-9R2裝置的已知連線問題 LMP-9R2型
1271 一般 Wi-Fi 疑難排解指南 LMP-8R2型

下列混合式搜尋範例會同時指定 和 來指定query_text字詞 query_vectorWi-Fi issues LMP-9R2 在此範例中,關鍵字搜尋在公司獨有的專有術語(例如本例中為「LMP-9R2」)上表現更好,而通常在公共資料集上訓練的向量搜尋無法識別「LMP-9R2」等術語。


SELECT * FROM vector_search(
  index => 'main.support_docs.index',
  query_text => 'Wi-Fi issues LMP-9R2',
  query_vector => array( 0.0213, 0.1045, 0.0871, 0.0562, 0.1459, ... 0.0131),-- a self computed embedding of the `query_text` param
  query_type => 'HYBRID',
  num_results => 3 )

doc_id title product_code
1,403 Wi-Fi 故障排除指南 — LMP-9R2 LMP-9R2型
1332 LMP-9R2裝置的已知連線問題 LMP-9R2型
1271 一般 Wi-Fi 疑難排解指南 LMP-8R2型

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

搜尋產品 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)
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 查詢編號 搜尋識別碼 搜尋.產品名稱
iphone 1 10 iPhone 10 手機
iphone 1 20 iPhone SE 的
像素 8 2 30 像素 8
像素 8 2 40 像素 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)
識別碼 影像名稱 圖像嵌入
28 horse.jpg [0.46, -0.34, 0.77, 0.21]
二十七 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
查詢嵌入 搜尋識別碼 搜尋.圖像名稱 搜尋圖片嵌入
[0.45, -0.35, 0.78, 0.22] 二十七 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 無法與使用 基礎模型 API 設定輸送量的模型服務端點一起使用。