Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Função
Aplica-se a:
Databricks SQL
Importante
Esta funcionalidade está em Pré-visualização Pública.
A vector_search() função permite que você consulte um índice Mosaic AI Vetor Search usando SQL.
Requisitos
- Esta função não está disponível em armazéns SQL clássicos.
- Para obter mais informações, consulte a página de preços do Databricks SQL.
- Esta função está disponível nas regiões onde o Mosaic AI Vector Search é compatível.
Sintaxe
No Databricks Runtime 15.3 e superior, use query_text ou query_vector especifique o que procurar no índice.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
No Databricks Runtime 15.2 e inferior, use query para especificar o que procurar no índice.
SELECT * FROM vector_search(
index, query, num_results
)
Argumentos
Todos os argumentos devem ser passados pelo nome, como vector_search(index => indexName, query_text => queryText).
-
index: UmaSTRINGconstante, o nome totalmente qualificado de um índice de pesquisa vetorial existente no mesmo espaço de trabalho para invocações. O definer deve terSelectpermissão no índice. - Use uma das seguintes opções para especificar a expressão a ser pesquisada no índice:
- Para o Databricks Runtime 15.3 ou superior, use
query_textpara procurar uma cadeia de caracteres específica de texto na coluna de origem de incorporação do seu Delta Sync Index. A consulta deve ser uma expressãoSTRINGda cadeia de caracteres a ser pesquisada no índice. - Para o Databricks Runtime 15.3 ou superior, use
query_vectorpara procurar um vetor específico na coluna de vetores de incorporação do seu Delta Sync Index. Esse argumento é necessário para pesquisar um índice Delta Sync usando vetores autogerenciados. A consulta deve ser uma expressãoARRAY<FLOAT>, ouARRAY<DOUBLE>, ouARRAY<DECIMAL(_, _)>do vetor de incorporação a ser pesquisado no índice. - Para Databricks Runtime 15.2 ou inferior, use
querypara 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. -
query_type(opcional): o tipo de pesquisa que você deseja realizar em seu índice de pesquisa vetorial. O padrão é seANNnão for especificado explicitamente.- Se o
query_typeforANN, então um ouquery_textquery_vectordeve ser especificado para executar uma pesquisa aproximada de vizinhos mais próximos ou pesquisa de similaridade. - Se o
query_typeéHYBRID, entãoquery_textdeve ser especificado. Você pode especificar ambosquery_textequery_vectorpara uma pesquisa híbrida. A pesquisa híbrida, neste caso, significa uma combinação de pesquisa de semelhança e pesquisa por palavra-chave, em que uma pesquisa por palavra-chave usa o texto literal como destino.
- Se o
A tabela a seguir resume quais argumentos podem ser usados quando você tem um índice Delta Sync com um modelo de incorporação:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
| ANN (também conhecido como vizinho aproximado mais próximo ou pesquisa de similaridade) | ✓ |
|
|
| ANN (também conhecido como vizinho aproximado mais próximo ou pesquisa de similaridade) | ✓ | Use query_vector para uma pesquisa de similaridade. |
|
| Híbrido | ✓ |
|
|
| Híbrido | ✓ | ✓ | Use query_text para pesquisa de palavras-chave e use query_vector para pesquisa de similaridade. |
A tabela a seguir descreve os diferentes cenários e os argumentos que podem ser usados quando você tem um índice de sincronização Delta sem um modelo de incorporação:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
ANN (também conhecido como vizinho aproximado mais próximo ou pesquisa de similaridade) |
✓ | Usequery_vector para uma pesquisa de similaridade. A pesquisa de semelhança requer um vetor de incorporação como destino de pesquisa. Como um modelo de incorporação não está disponível neste cenário para calcular o vetor de incorporação, você deve fornecê-lo. |
|
| Híbrido | ✓ | ✓ | Para uma pesquisa híbrida para uma cadeia de caracteres específica de texto e um vetor, especifique ambos query_text e query_vector. |
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 exemplos de consultas SQL para diferentes pesquisas de índice.
Consultas de pesquisa híbridas
O exemplo de pesquisa híbrida a seguir combina os seguintes tipos de pesquisa para localizar os termos fornecidos em texto ou metadados do índice de pesquisa vetorial:
- Pesquisa de semelhança vetorial: Para encontrar um significado semântico semelhante para
Wi-Fi issues. - Pesquisa por palavra-chave: para encontrar
Wi-Fi issues LMP-9R2num índice de palavras-chave.
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 |
|---|---|---|
| 1403 | Guia de solução de problemas do Wi-Fi — LMP-9R2 | LMP-9R2 |
| 1332 | Problemas de conectividade conhecidos para dispositivos LMP-9R2 | LMP-9R2 |
| 1271 | Guia geral de solução de problemas de Wi-Fi | LMP-8R2 |
O exemplo de pesquisa híbrida a seguir especifica ambos e query_textquery_vector para o termo, Wi-Fi issues LMP-9R2. Neste exemplo, a pesquisa por palavras-chave tem melhor desempenho em termos proprietários exclusivos de uma empresa (como "LMP-9R2" neste caso), enquanto a pesquisa vetorial, que normalmente é treinada em conjuntos de dados públicos, não reconhece termos como "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 |
|---|---|---|
| 1403 | Guia de solução de problemas do Wi-Fi — LMP-9R2 | LMP-9R2 |
| 1332 | Problemas de conectividade conhecidos para dispositivos LMP-9R2 | LMP-9R2 |
| 1271 | Guia geral de solução de problemas de Wi-Fi | LMP-8R2 |
Consultas de texto em índices com incorporação de colunas de origem
Pesquise sobre um índice de SKUs de produtos para encontrar produtos semelhantes por nome. O exemplo a seguir usa query_text que só é suportado no Databricks Runtime 15.3 e superior. Para 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 | Telemóvel |
| 20 | iPhone SE [en] |
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 [en] |
| píxel 8 | 2 | 30 | Píxel 8 |
| píxel 8 | 2 | 40 | Píxel 8a |
Consultas de texto em índices com incorporação de colunas de origem
Pesquise num índice de imagens com incorporações pré-computadas para encontrar imagens semelhantes por incorporação. O exemplo a seguir usa query_vector que só é suportado no Databricks Runtime 15.3 e superior. Para 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 | nome_da_imagem | 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 | Procura.nome_da_imagem | incorporação_de_imagem_de_pesquisa |
|---|---|---|---|
| [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 aplicam-se durante a pré-visualização:
- Não é suportado consultar tipos de índice
DIRECT_ACCESS. - Os parâmetros de entrada
filters_jsonoucolumnsnão são suportados. - As Pesquisas Vetoriais com um
num_resultsmaior que 100 não são suportadas. -
vector_searchnão pode ser usado em pontos finais de serviço do modelo com capacidade provisionada das APIs de Modelo Fundamental.