Partilhar via


Função vector_search

Aplica-se a:Marque Sim 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: Uma STRING constante, o nome totalmente qualificado de um índice de pesquisa vetorial existente no mesmo espaço de trabalho para invocações. O definer deve ter Select permissã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_text para 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ão STRING 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 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ão ARRAY<FLOAT>, ou ARRAY<DOUBLE>, ou ARRAY<DECIMAL(_, _)> do vetor de incorporação a ser pesquisado no índice.
    • Para Databricks Runtime 15.2 ou inferior, use query para especificar a cadeia de caracteres a ser pesquisada em seu índice.
  • 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 é se ANN não for especificado explicitamente.
    • Se o query_type for ANN , então um ou query_textquery_vector deve ser especificado para executar uma pesquisa aproximada de vizinhos mais próximos ou pesquisa de similaridade.
    • Se o query_type é HYBRID, então query_text deve ser especificado. Você pode especificar ambos query_text e query_vector para 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.

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)
  • Para uma pesquisa de semelhança para uma cadeia de caracteres específica de texto ou um vetor, você pode especificar query_text.
  • A incorporação pode ser calculada automaticamente a partir de , e usada para a pesquisa de similaridade, portanto, não há necessidade de query_textespecificar query_vector.
ANN (também conhecido como vizinho aproximado mais próximo ou pesquisa de similaridade) Use query_vector para uma pesquisa de similaridade.
Híbrido
  • Use query_text para uma pesquisa por palavra-chave. A pesquisa por palavra-chave usa o texto literal como destino, por isso query_text é obrigatório.
  • A incorporação pode ser calculada automaticamente a partir de , e usada para a pesquisa de similaridade, portanto, não há necessidade de query_textespecificar query_vector.
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-9R2 num í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_json ou columns não são suportados.
  • As Pesquisas Vetoriais com um num_results maior que 100 não são suportadas.
  • vector_search não pode ser usado em pontos finais de serviço do modelo com capacidade provisionada das APIs de Modelo Fundamental.