Pular para o conteúdo principal

Consultar um índice de pesquisa vetorial

Este artigo descreve como consultar um índice de pesquisa vetorial, incluindo como usar filtros e reclassificação.

Por exemplo, veja o Notebook de exemplo de pesquisa vetorial e como consultar endpoints e índices de pesquisa vetorial. Para obter informações de referência, consulte a referênciaPython SDK.

Instalação

Para usar o SDK de busca vetorial, você precisa instalá-lo em seu Notebook. Utilize o seguinte código para instalar o pacote:

%pip install databricks-vectorsearch
dbutils.library.restartPython()

Em seguida, use o seguinte comando para importar VectorSearchClient:

from databricks.vector_search.client import VectorSearchClient

Para obter informações sobre autenticação, consulte Proteção de dados e autenticação.

Como consultar um índice de pesquisa vetorial

Você só pode consultar o índice de pesquisa vetorial usando o SDK Python, a API REST ou a função SQL vector_search() AI.

nota

Se o usuário que consulta o índice não for o proprietário do índice de pesquisa vetorial, ele deverá ter os seguintes privilégios de usuário do UC:

  • USE CATALOG no catálogo que contém o índice de busca vetorial.
  • USE SCHEMA no esquema que contém o índice de pesquisa vetorial.
  • Selecione no índice de pesquisa vetorial.

O tipo de consulta default é ann (vizinho mais próximo aproximado). Para realizar uma pesquisa híbrida de similaridade de palavras-chave, defina o parâmetro query_type como hybrid. Na busca híbrida, todas as colunas de metadados de texto são incluídas e um máximo de 200 resultados são retornados.

Para usar o reclassificador em uma consulta, consulte Usar o reclassificador em uma consulta.

info

Beta

A busca por texto completo está disponível como recurso beta. Para realizar uma pesquisa de texto completo, defina o parâmetro query_type como FULL_TEXT. Com a pesquisa de texto completo, você pode recuperar até 200 resultados com base na correspondência de palavras-chave sem usar incorporações vetoriais.

Para obter detalhes, consulte a referência do SDK do Python.

Python
# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2
)

# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="hybrid"
)

# Delta Sync Index using full-text search (Beta)
results4 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="FULL_TEXT"
)

# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
query_vector=[0.9] * 1024,
columns=["id", "text"],
num_results=2
)

Use filtros nas consultas

Uma consulta pode definir filtros com base em qualquer coluna da tabela Delta. similarity_search retorna apenas as linhas que correspondem aos filtros especificados.

A tabela a seguir lista os filtros suportados.

Operador de filtro

Comportamento

Exemplos

NOT

Padrão : Anula o filtro. A key deve terminar com “NOT”. Por exemplo, “cor NÃO” com o valor “vermelho” corresponde a documentos onde a cor não é vermelha.

Otimizado para armazenamento : Consulte o operador!= (sinal bangeq).

Padrão : {"id NOT": 2} {“color NOT”: “red”}

Otimizado para armazenamento : "id != 2" "color != 'red'"

<

Padrão : verifica se o valor do campo é menor que o valor do filtro. O endereço key deve terminar com " <". Por exemplo, “price <” com valor 200 corresponde a documentos em que o preço é menor que 200.

Otimizado para armazenamento : Consulte o operador< (sinal lt).

Padrão : {"id <": 200}

Otimizado para armazenamento : "id < 200"

<=

Padrão : Verifica se o valor do campo é menor ou igual ao valor do filtro. A key deve terminar com “<=”. Por exemplo, “preço <=” com valor 200 corresponde a documentos onde o preço é menor ou igual a 200.

Otimizado para armazenamento : Consulte o operador<= (sinal de igualdade).

Padrão : {"id <=": 200}

Otimizado para armazenamento : "id <= 200"

>

Padrão : Verifica se o valor do campo é maior que o valor do filtro. A key deve terminar com “ >”. Por exemplo, “preço >” com valor 200 corresponde a documentos onde o preço é superior a 200.

Otimizado para armazenamento : Consulte o operador> (sinal gt).

Padrão : {"id >": 200}

Otimizado para armazenamento : "id > 200"

>=

Padrão : Verifica se o valor do campo é maior ou igual ao valor do filtro. A key deve terminar com “>=”. Por exemplo, “preço >=” com o valor 200 corresponde a documentos onde o preço é maior ou igual a 200.

Otimizado para armazenamento : Consulte o operador>= (gt sinal de igualdade).

Padrão : {"id >=": 200}

Otimizado para armazenamento : "id >= 200"

OR

Padrão : Verifica se o valor do campo corresponde a algum dos valores de filtro. A key deve conter OR para separar várias subchaves. Por exemplo, color1 OR color2 com valor ["red", "blue"] corresponde a documentos onde color1 é red ou color2 é blue.

Otimizado para armazenamento : Consulte o operadoror.

Padrão : {"color1 OR color2": ["red", "blue"]}

Otimizado para armazenamento : "color1 = 'red' OR color2 = 'blue'"

LIKE

Padrão : Corresponde tokens separados por espaços em branco em uma string. Veja os exemplos de código abaixo.

Otimizado para armazenamento : Consulte o operadorlike.

Padrão : {"column LIKE": "hello"}

Otimizado para armazenamento : "column LIKE 'hello'"

Nenhum operador de filtro especificado

Padrão : O filtro verifica se há uma correspondência exata. Se forem especificados vários valores, qualquer um deles será considerado válido.

Otimizado para armazenamento : Consulte o operador= (sinal de igualdade) e o predicadoin.

Padrão : {"id": 200} {"id": [200, 300]}

Otimizado para armazenamento : "id = 200" "id IN (200, 300)"

to_timestamp (somente endpoint otimizado para armazenamento)

Otimizado para armazenamento : Filtre por data e hora. Consulte a funçãoto_timestamp

Otimizado para armazenamento : "date > TO_TIMESTAMP('1995-01-01')"

Veja os exemplos de código a seguir:

Python
# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title": ["Ares", "Athena"]},
num_results=2
)

# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title OR id": ["Ares", "Athena"]},
num_results=2
)

# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title NOT": "Hercules"},
num_results=2
)

Use o reclassificador em uma consulta

info

Visualização

Este recurso está em Pré-visualização Pública.

O desempenho do agente depende da recuperação da informação mais relevante para uma consulta. A reclassificação é uma técnica que melhora a qualidade da recuperação de dados, avaliando os documentos recuperados para identificar aqueles que são semanticamente mais relevantes. Databricks desenvolveu um sistema AI composto, baseado em pesquisa, para identificar esses documentos. Você também pode especificar colunas contendo metadados que deseja que o reclassificador utilize para obter contexto adicional ao avaliar a relevância de cada documento.

A reclassificação acarreta um pequeno atraso de latência, mas pode melhorar significativamente a qualidade da recuperação e o desempenho do agente. A Databricks recomenda experimentar a reclassificação para qualquer caso de uso de agente RAG.

Os exemplos nesta seção mostram como usar o reclassificador de busca vetorial. Ao usar o reclassificador, você define as colunas a serem retornadas (columns) e as colunas de metadados a serem usadas para reclassificação (columns_to_rerank) separadamente. num_results é o número final de resultados a serem retornados. Isso não afeta o número de resultados usados para a reclassificação.

A mensagem de depuração da consulta inclui informações sobre quanto tempo demorou a reclassificação do passo. Por exemplo:

Bash
'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}

Se a chamada do reclassificador falhar, essa informação será incluída na mensagem de depuração:

Bash
'debug_info': {'response_time': 587.0, 'ann_time': 331.0, 'reranker_time': 246.0, 'warnings': [{'status_code': 'RERANKER_TEMPORARILY_UNAVAILABLE', 'message': 'The reranker is temporarily unavailable. Results returned have not been processed by the reranker. Please try again later for reranked results.'}]}
nota

A ordem em que as colunas são listadas em columns_to_rerank é importante. O cálculo de reclassificação considera as colunas na ordem em que estão listadas e leva em conta apenas os primeiros 2000 caracteres encontrados.

Python
# Install the most recent version.
# Databricks SDK version 0.57 or above is required to use the reranker.
%pip install databricks-vectorsearch --force-reinstall
dbutils.library.restartPython()
Python
from databricks.vector_search.reranker import DatabricksReranker

results = index.similarity_search(
query_text = "How to create a Vector Search index",
columns = ["id", "text", "parent_doc_summary", "date"],
num_results = 10,
query_type = "hybrid",
reranker=DatabricksReranker(columns_to_rerank=["text", "parent_doc_summary", "other_column"])
)