Compartilhar via


Função vector_search

Aplica-se a:marque sim 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

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 constante STRING, o nome totalmente qualificado de um índice de busca em vetores atual no mesmo workspace para invocações. O definidor deve ter Select permissã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_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ã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 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ão ARRAY<FLOAT>, ou ARRAY<DOUBLE>ou ARRAY<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.
  • 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 é, ANN se não especificado explicitamente.
    • Se for query_typeANN , ou query_textquery_vector deve ser especificado para executar uma pesquisa aproximada de vizinho ou pesquisa de similaridade.
    • Se estiver query_typeHYBRID, então query_text deve ser especificado. Você pode especificar tanto quanto query_textquery_vector para 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.

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)
  • Para uma pesquisa de similaridade para uma cadeia de caracteres específica de texto ou um vetor, você pode especificar query_text.
  • A inserção pode ser calculada automaticamente e usada para a pesquisa de query_textsimilaridade, portanto, não é necessário especificar query_vector.
ANN (também conhecido como vizinho mais próximo aproximado ou pesquisa de similaridade) Use query_vector para uma pesquisa de similaridade.
Híbrido
  • Use query_text para uma pesquisa de palavra-chave. A pesquisa de palavra-chave usa o texto literal como destino, portanto query_text , é necessário.
  • A inserção pode ser calculada automaticamente e usada para a pesquisa de query_textsimilaridade, portanto, não é necessário especificar query_vector.
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-9R2 em 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_json ou columns.
  • Não há suporte para a busca em vetores com num_results maior que 100.
  • vector_search nã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.