适用于: Databricks SQL
重要说明
此功能目前以公共预览版提供。
使用vector_search()
函数,可以使用 SQL 查询Mosaic AI 矢量搜索索引。
要求
- 此函数在经典 SQL 仓库中不可用。
- 有关详细信息,请参阅Databricks 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
常量,同一工作区中现有矢量搜索索引的完全限定名称,用于调用。 定义者必须对索引具有“选择”权限。 - 使用以下项之一指定要在索引中搜索的表达式:
- 对于 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。
返回内容
索引中排名靠前的匹配记录的表。 包含索引的所有列。
示例
以下部分显示不同索引搜索的示例 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 | 图像名称 | image_embedding |
---|---|---|
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
query_embedding | search.id | search.image_name | search_image_embedding |
---|---|---|---|
[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
不能与使用 Foundation Model API 预置吞吐量的模型服务终结点一起使用。