vector_search
函式
適用於: Databricks SQL
重要
這項功能處於公開預覽狀態。
vector_search()
函式可讓你使用 SQL 查詢 Mosaic AI 向量搜尋索引。
需求
- 這個函式不適用於傳統 SQL 倉儲。
- 如需詳細資訊,請參閱 Databricks SQL 價格頁面。
- 此函式可在支持馬賽克 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
常數,相同工作區中,用於叫用之現有向量搜尋索引的完整名稱。 定義器必須具有索引的 「選取」許可權。 - 使用下列其中一項來指定要在索引中搜尋的表示式:
- 針對 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
指定要在索引中搜尋的字串。
- 針對 Databricks Runtime 15.3 或更新版本,請使用
-
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_json
或columns
。 - 不支援
num_results
大於 100 的向量搜尋。 - 沒有來源資料表讀取權限的使用者無法使用
vector_search()
。 - 使用
vector_search()
不支援混合式關鍵詞相似性搜尋。 -
vector_search
無法搭配使用基礎模型 API 佈建之輸送量的模型服務端點使用。