Compartilhar via


VECTOR_DISTANCE (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzureBanco de DadosSQL do Azure Banco de Dados SQL banco de dados SQL do Banco de Dados SQL do Azurebanco de dados SQL no Microsoft Fabric

A VECTOR_DISTANCE função calcula a distância entre dois vetores usando uma métrica de distância especificada. A distância do vetor é sempre exata e não usa nenhum índice de vetor, mesmo que disponível. Para usar um índice de vetor e, portanto, executar uma pesquisa de vetor aproximada, você deve usar a função VECTOR_SEARCH . Para saber mais sobre como funciona a indexação de vetores e a pesquisa de vetor e as diferenças entre a pesquisa exata e aproximada, consulte a pesquisa vetor e índices de vetor no Mecanismo de Banco de Dados SQL.

Note

VECTOR_DISTANCEestá disponível na Instância Gerenciada de SQL do Azure com a política de atualização do SQL Server 2025 ou Always-up-to-date.

Syntax

Convenções de sintaxe de Transact-SQL

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

Uma string com o nome da métrica de distância a ser usada para calcular a distância entre os dois vetores fornecidos. As seguintes métricas de distância são suportadas:

  • cosine - Distância do cosseno
  • euclidean - Distância euclidiana
  • dot - (Negativo) Produto escalar

vector1

Uma expressão que é avaliada como tipo de dados de vetor .

vector2

Uma expressão que é avaliada como tipo de dados de vetor .

Métricas de distância

Metric Description Range Examples
cosine Distância do cosseno (angular) [0, 2] 0: vetores idênticos
2: vetores opostos
euclidean Distância euclidiana [0, +∞] 0: vetores idênticos
dot Indicação de distância baseada em produto escalar,
obtido pelo cálculo do produto escalar negativo
[-∞, +∞] Números menores indicam vetores mais semelhantes

Valor de retorno

A função retorna um valor escalar flutuante que representa a distância entre os dois vetores usando a métrica de distância especificada.

Um erro será retornado se distance_metric não for uma métrica válida e se os vetores fornecidos não forem do tipo de dados de vetor.

Examples

Os detalhes do banco de dados usado no exemplo podem ser encontrados no GitHub: Baixe e importe o artigo da Wikipédia com o Vector Embeddings.

Os exemplos assumem a existência de uma tabela nomeada wikipedia_articles com uma coluna title_vector do tipo vector que armazena as incorporações de títulos de artigos da Wikipédia. title_vector supõe-se que seja uma inserção gerada com um modelo de inserção, como text-embedding-ada-002 ou text-embedding-3-small, que retorna vetores com 1.536 dimensões.

Para obter mais exemplos, incluindo soluções de ponta a ponta, acesse o repositório GitHub de Exemplos de Pesquisa de Vetor do Banco de Dados SQL do Azure.

A. Criar um vetor de uma matriz JSON

O exemplo a seguir cria um vetor com três dimensões de uma cadeia de caracteres com uma matriz JSON.

DECLARE @v1 AS VECTOR(2) = '[1,1]';
DECLARE @v2 AS VECTOR(2) = '[-1,-1]';

SELECT VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
       VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
       VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;

B. Retornar os 10 principais artigos semelhantes com base em títulos

O exemplo a seguir retorna os 10 artigos mais semelhantes a um determinado artigo, com base na distância do cosseno entre seus vetores de título.

DECLARE @v AS VECTOR(1536);

SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';

SELECT TOP (10) id,
                title,
                VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
ORDER BY distance;

C. Retornar artigos semelhantes com base na distância de vetor específica

O exemplo a seguir retorna todos os artigos semelhantes a um determinado artigo, com base na distância cosseno entre seus vetores de título, selecionando apenas títulos com uma distância menor que 0,3.

DECLARE @v AS VECTOR(1536);

SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';

SELECT id,
       title,
       VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
WHERE VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY distance;