Condividi tramite


VECTOR_DISTANCE (Transact-SQL)

Si applica a: Sql Server 2025 (17.x) DatabaseSQL di Azure Istanza gestita di SQL di Azurein Microsoft Fabric

La VECTOR_DISTANCE funzione calcola la distanza tra due vettori usando una metrica di distanza specificata. La distanza vettoriale è sempre esatta e non usa alcun indice vettoriale, anche se disponibile. Per usare un indice vettoriale ed eseguire quindi una ricerca vettoriale approssimativa, è necessario usare la funzione VECTOR_SEARCH . Per altre informazioni sul funzionamento dell'indicizzazione vettoriale e della ricerca vettoriale e sulle differenze tra ricerca esatta e approssimativa, vedere Ricerca vettoriale e indici vettoriali nel motore di database SQL.

Note

VECTOR_DISTANCEè disponibile in Istanza gestita di SQL di Azure con i criteri di aggiornamento di SQL Server 2025 o Always-up-to-date.

Syntax

Convenzioni relative alla sintassi Transact-SQL

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

Stringa con il nome della metrica della distanza da usare per calcolare la distanza tra i due vettori specificati. Sono supportate le metriche di distanza seguenti:

  • cosine - Distanza coseno
  • euclidean - Distanza euclidea
  • dot - (Negativo) Prodotto punto

vector1

Espressione che restituisce il tipo di dati vector .

vector2

Espressione che restituisce il tipo di dati vector .

Metriche di distanza

Metric Description Range Examples
cosine Distanza coseno (angolare) [0, 2] 0: vettori identici
2: vettori opposti
euclidean Distanza euclidea [0, +∞] 0: vettori identici
dot Indicazione a base di prodotto punto di distanza,
ottenuto calcolando il prodotto punto negativo
[-∞, +∞] I numeri più piccoli indicano vettori più simili

Valore restituito

La funzione restituisce un valore float scalare che rappresenta la distanza tra i due vettori usando la metrica di distanza specificata.

Viene restituito un errore se distance_metric non è una metrica valida e se i vettori forniti non sono del tipo di dati vector.

Examples

I dettagli del database usato nell'esempio sono disponibili in GitHub: Scaricare e importare l'articolo di Wikipedia con incorporamenti vettoriali.

Gli esempi presuppongono l'esistenza di una tabella denominata wikipedia_articles con una colonna title_vector di tipo vector che archivia gli incorporamenti del titolo degli articoli di Wikipedia. title_vector si presuppone che sia un incorporamento generato con un modello di incorporamento, ad esempio text-embedding-ada-002 o text-embedding-3-small, che restituisce vettori con 1.536 dimensioni.

Per altri esempi, incluse le soluzioni end-to-end, vedere il repository GitHub Degli esempi di ricerca vettoriale del database SQL di Azure.

A. Creare un vettore da una matrice JSON

L'esempio seguente crea un vettore con tre dimensioni da una stringa con una matrice 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. Restituire i primi 10 articoli simili in base ai titoli

Nell'esempio seguente vengono restituiti i primi 10 articoli più simili a un determinato articolo, in base alla distanza del coseno tra i vettori del titolo.

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. Restituire articoli simili in base a una distanza vettoriale specifica

Nell'esempio seguente vengono restituiti tutti gli articoli simili a un determinato articolo, in base alla distanza del coseno tra i vettori del titolo, selezionando solo i titoli con una distanza inferiore 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;