vector_search 函数

适用于:勾选“是” Databricks SQL

重要说明

此功能目前以公共预览版提供。

使用vector_search()函数,可以使用 SQL 查询Mosaic 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_textDelta Sync Index 的嵌入源列中搜索特定的文本字符串。 查询必须是一个用于在索引中搜索字符串的 STRING 表达式。
    • 对于 Databricks Runtime 15.3 或更高版本,使用 query_vector 在 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 图像名称 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_jsoncolumns
  • 不支持num_results 大于 100 的矢量搜索。
  • vector_search 不能与使用 Foundation Model API 预置吞吐量的模型服务终结点一起使用。