Compartir por


VECTOR_DISTANCE (Transact-SQL)

Se aplica a: SQL Server 2025 (17.x) Base de datos SQL de Azure SQL Database deAzure SQL Managed Instanceen Microsoft Fabric

La VECTOR_DISTANCE función calcula la distancia entre dos vectores mediante una métrica de distancia especificada. La distancia de vector siempre es exacta y no usa ningún índice vectorial, incluso si está disponible. Para usar un índice vectorial y, por tanto, realizar una búsqueda vectorial aproximada, debe usar la función VECTOR_SEARCH . Para obtener más información sobre cómo funciona la indexación de vectores y la búsqueda de vectores, y las diferencias entre la búsqueda exacta y aproximada, consulte Búsqueda de vectores e índices de vectores en el motor de base de datos SQL.

Note

VECTOR_DISTANCEestá disponible en Instancia administrada de Azure SQL con la directiva de actualización de sql Server 2025 o Always-up-to-date.

Syntax

Convenciones de sintaxis de Transact-SQL

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

Cadena con el nombre de la métrica de distancia que se va a usar para calcular la distancia entre los dos vectores especificados. Se admiten las siguientes métricas de distancia:

  • cosine - Distancia de coseno
  • euclidean - Distancia euclidiana
  • dot - (Negativo) Producto de puntos

vector1

Expresión que se evalúa como el tipo de datos vectorial .

vector2

Expresión que se evalúa como el tipo de datos vectorial .

Métricas de distancia

Metric Description Range Examples
cosine Distancia de coseno (angular) [0, 2] 0: vectores idénticos
2: vectores opuestos
euclidean Distancia euclidiana [0, +∞] 0: vectores idénticos
dot Indicación de distancia basada en producto de puntos,
obtenido calculando el producto de puntos negativos
[-∞, +∞] Los números más pequeños indican vectores más similares

Valor devuelto

La función devuelve un valor float escalar que representa la distancia entre los dos vectores mediante la métrica de distancia especificada.

Se devuelve un error si distance_metric no es una métrica válida y si los vectores proporcionados no son del tipo de datos vectorial.

Examples

Los detalles de la base de datos usada en el ejemplo se pueden encontrar en GitHub: Descargar e importar el artículo de Wikipedia con incrustaciones de vectores.

En los ejemplos se supone que existe una tabla denominada wikipedia_articles con una columna title_vector de tipo vector que almacena las inserciones de título de los artículos de Wikipedia. title_vector se supone que es una inserción generada con un modelo de inserción, como text-embedding-ada-002 o text-embedding-3-small, que devuelve vectores con 1536 dimensiones.

Para obtener más ejemplos, incluidas las soluciones de un extremo a otro, vaya al repositorio de GitHub Ejemplos de búsqueda de vectores de Azure SQL Database.

A. Creación de un vector a partir de una matriz JSON

En el ejemplo siguiente se crea un vector con tres dimensiones a partir de una cadena con una 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. Devolver los 10 artículos más similares basados en títulos

En el ejemplo siguiente se devuelven los 10 artículos más similares a un artículo determinado, en función de la distancia coseno entre sus vectores 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. Devolver artículos similares basados en una distancia vectorial específica

En el ejemplo siguiente se devuelven todos los artículos similares a un artículo determinado, en función de la distancia coseno entre sus vectores de título, seleccionando solo títulos con una distancia 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;