Função vector_search
Aplica-se a: SQL do Databricks
Importante
Esse recurso está em uma versão prévia.
A função vector_search()
permite que você consulte um índice do Mosaic AI Vector Search usando SQL.
Requisitos
- Essa função não está disponível em warehouses SQL clássicos.
- Para saber mais, consulte a página de preços do Databricks SQL.
- Esta função está disponível em regiões onde o Mosaic AI Vector Search tem suporte.
Sintaxe
No Databricks Runtime 15.3 e superior, você pode usar query_text
ou query_vector
para especificar o que pesquisar no índice.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
No Databricks Runtime 15.2 e abaixo, você pode usar query
para especificar o que pesquisar no índice.
SELECT * FROM vector_search(
index, query, num_results
)
Argumentos
Todos os argumentos devem ser transmitidos por nome, como vector_search(index => indexName, query_text => queryText)
.
index
: uma constanteSTRING
, o nome totalmente qualificado de um índice de busca em vetores atual no mesmo workspace para invocações. O definidor deve ter a permissão “Selecionar” no índice.- Use um dos seguintes procedimentos para especificar a expressão a ser pesquisada no índice:
- Para o Databricks Runtime 15.3 ou superior, use
query_text
para pesquisar uma cadeia de texto específica na coluna de fonte de embeddings do índice de sincronização Delta. A consulta deve ser uma expressãoSTRING
da cadeia de caracteres a ser pesquisada no índice. - Para o Databricks Runtime 15.3 ou superior, use
query_vector
para procurar um vetor específico na coluna de vetor de incorporação do seu Índice de Sincronização Delta. Esse argumento é necessário para pesquisar um Índice de Sincronização Delta usando vetores autogerenciados. A consulta deve ser uma expressãoARRAY<FLOAT>
, ouARRAY<DOUBLE>
ouARRAY<DECIMAL(_, _)>
do vetor de inserção para pesquisar no índice. - Para o Databricks Runtime 15.2 ou inferior, use
query
para especificar a cadeia de caracteres a ser pesquisada em seu índice.
- Para o Databricks Runtime 15.3 ou superior, use
num_results
(opcional): uma constante inteira, o número máximo de registros a serem retornados. O valor padrão é 10.
Devoluções
Uma tabela dos principais registros correspondentes do índice. Todas as colunas do índice estão incluídas.
Exemplos
As seções a seguir mostram consultas SQL de exemplo para diferentes pesquisas de índice.
Consultas de texto em índices com colunas de origem de inserção
Pesquise produtos semelhantes por nome em um índice de SKUs de produtos. O exemplo a seguir usa query_text
que só tem suporte no Databricks Runtime 15.3 e superior. Para o Databricks Runtime 15.2 e inferior, use query
em vez de query_text
.
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID | Nome do produto |
---|---|
10 | iPhone |
20 | iPhone SE |
O exemplo a seguir pesquisa vários termos ao mesmo tempo usando uma subconsulta 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 |
Consultas de texto em índices com colunas de origem de inserção
Pesquise um índice de imagens com inserções pré-computadas para encontrar imagens semelhantes por inserção. O exemplo a seguir usa query_vector
que só tem suporte no Databricks Runtime 15.3 e superior. Para o Databricks Runtime 15.2 e inferior, use query
em vez de 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_name | incorporação de imagem |
---|---|---|
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] |
O exemplo a seguir pesquisa vários termos ao mesmo tempo usando uma subconsulta 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] | 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] |
Limitações
As seguintes limitações se aplicam durante a versão preliminar:
- Não há suporte para consultar tipos de índice
DIRECT_ACCESS
. - Não há suporte para os parâmetros de entrada
filters_json
oucolumns
. - Não há suporte para a busca em vetores com
num_results
maior que 100. - Usuários que não têm permissão de leitura na tabela de origem não podem usar
vector_search()
. - Não há suporte para pesquisa de similaridade de palavra-chave híbrida usando
vector_search()
. vector_search
não pode ser usado com pontos de extremidade de serviço do modelo usando a taxa de transferência provisionada das APIs do Foundation Model.