Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Função
Aplica-se a:
Databricks SQL
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 a busca em vetores do Mosaic AI tem suporte.
Sintaxe
No Databricks Runtime 15.3 e superior, use query_text ou query_vector especifique o que pesquisar no índice.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
No Databricks Runtime 15.2 e abaixo, use 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 terSelectpermissão 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_textpara 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ã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 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
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 executar no índice de pesquisa de vetor. O padrão é,ANNse não especificado explicitamente.- Se for
query_typeANN, ouquery_textquery_vectordeve ser especificado para executar uma pesquisa aproximada de vizinho ou pesquisa de similaridade. - Se estiver
query_typeHYBRID, entãoquery_textdeve ser especificado. Você pode especificar tanto quantoquery_textquery_vectorpara uma pesquisa híbrida. A pesquisa híbrida nesta instância significa uma combinação de pesquisa de similaridade e pesquisa de palavra-chave em que uma pesquisa de palavra-chave usa o texto literal como destino.
- Se for
A tabela a seguir resume quais argumentos podem ser usados quando você tem um índice de Sincronização Delta com um modelo de inserção:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
| ANN (também conhecido como vizinho mais próximo aproximado ou pesquisa de similaridade) | ✓ |
|
|
| ANN (também conhecido como vizinho mais próximo aproximado ou pesquisa de similaridade) | ✓ | Use query_vector para uma pesquisa de similaridade. |
|
| Híbrido | ✓ |
|
|
| Híbrido | ✓ | ✓ | Use query_text para pesquisa de palavra-chave e uso 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 inserção:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
ANN (também conhecido como vizinho mais próximo aproximado ou pesquisa de similaridade) |
✓ | Usequery_vector para uma pesquisa de similaridade. A pesquisa de similaridade requer um vetor de inserção como um destino de pesquisa. Como um modelo de inserção não está disponível neste cenário para calcular o vetor de inserçã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. |
Retornos
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 pesquisa híbrida
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 de vetor:
- Pesquisa de similaridade de vetor: para encontrar um significado semântico semelhante para
Wi-Fi issues. - Pesquisa de palavra-chave: para localizar
Wi-Fi issues LMP-9R2em um índice de palavra-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 conhecidos de conectividade 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 tanto query_text quanto query_vector para o termo. Wi-Fi issues LMP-9R2 Neste exemplo, a pesquisa de palavra-chave tem um desempenho melhor em termos proprietários exclusivos para uma empresa (como "LMP-9R2" nesse caso), enquanto a pesquisa de vetor, 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 conhecidos de conectividade 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 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 | pesquisa.nome_do_produto |
|---|---|---|---|
| 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_jsonoucolumns. - Não há suporte para a busca em vetores com
num_resultsmaior que 100. -
vector_searchnão pode ser usado com pontos de extremidade do Serviço de Modelo usando a taxa de transferência provisionada de APIs do Modelo de Base.