適用於:
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常數,在相同工作區中用於調用的現有向量搜尋索引的完整名稱。 定義者必須具有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指定要在索引中搜尋的字串。
- 針對 Databricks Runtime 15.3 或更新版本,請使用
-
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(也稱為近似最近鄰或相似性搜尋) | ✓ |
|
|
| ANN(也稱為近似最近鄰或相似性搜尋) | ✓ | 用於 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_vector。Wi-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_json或columns。 - 不支援
num_results大於 100 的向量搜尋。 -
vector_search無法與使用 基礎模型 API 設定輸送量的模型服務端點一起使用。