Partilhar via


VETOR_DISTANCE (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in 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 vetorial é sempre exata e não usa nenhum índice vetorial, mesmo se disponível. Para usar um índice vetorial e, assim, realizar uma pesquisa vetorial aproximada, você deve usar a função VETOR_SEARCH . Para saber mais sobre como a indexação vetorial e a pesquisa vetorial funcionam, e as diferenças entre a pesquisa exata e aproximada, consulte Pesquisa vetorial e índices vetoriais no Mecanismo de Banco de dados SQL.

Note

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

Syntax

Transact-SQL convenções de sintaxe

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

Uma cadeia de caracteres 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 cossena
  • euclidean - Distância euclidiana
  • dot - Produto Dot (Negativo)

vetor1

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

vetor2

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

Métricas de distância

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

Valor de retorno

A função retorna um valor de flutuação escalar 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 vetoriais.

Examples

Detalhes do banco de dados usado no exemplo podem ser encontrados no GitHub: Baixe e importe o artigo da Wikipédia com incorporações vetoriais.

Os exemplos pressupõem 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 é assumido como uma incorporação gerada com um modelo de incorporaçã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, vá para o repositório GitHub de Exemplos de Pesquisa Vetorial do Banco de Dados SQL do Azure.

A. Criar um vetor a partir de uma matriz JSON

O exemplo a seguir cria um vetor com três dimensões a partir 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 top 10 artigos semelhantes com base em títulos

O exemplo a seguir retorna os 10 principais artigos mais semelhantes a um determinado artigo, com base na distância 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 vetorial específica

O exemplo a seguir retorna todos os artigos semelhantes para um determinado artigo, com base na distância cosseno entre seus vetores de título, selecionando apenas títulos com uma distância inferior a 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;