Delen via


VECTOR_DISTANCE (Transact-SQL)

Van toepassing op: SQL Server 2025 (17.x) Preview AzureSQL Database Azure SQL Managed InstanceSQL-databasein Microsoft Fabric Preview

De VECTOR_DISTANCE functie berekent de afstand tussen twee vectoren met behulp van een opgegeven afstandsmetriek. Vectorafstand is altijd exact en gebruikt geen vectorindex, zelfs als deze beschikbaar is. Als u een vectorindex wilt gebruiken en zo een geschatte vectorzoekopdracht wilt uitvoeren, moet u de VECTOR_SEARCH-functie gebruiken. Raadpleeg Vectoren in de SQL Database Engine voor meer informatie over de werking van vectorindexering en vectorzoekopdrachten en de verschillen tussen exacte en geschatte zoekopdrachten.

Note

VECTOR_DISTANCEis beschikbaar in Azure SQL Managed Instance met het updatebeleid voor SQL Server 2025 of Always-up-to-date update.

Syntax

Transact-SQL syntaxis-conventies

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

Een tekenreeks met de naam van de metrische afstand die moet worden gebruikt om de afstand tussen de twee opgegeven vectoren te berekenen. De volgende metrische gegevens over afstand worden ondersteund:

  • cosine - Cosinusafstand
  • euclidean - Euclidische afstand
  • dot - (Negatief) Dot-product

vector1

Een expressie die het gegevenstype vector evalueert.

vector2

Een expressie die het gegevenstype vector evalueert.

Metrische gegevens over afstand

Metric Description Range Examples
cosine Cosinusafstand (hoekig) [0, 2] 0: identieke vectoren
2: tegengestelde vectoren
euclidean Euclidische afstand [0, +∞] 0: identieke vectoren
dot Dot product-gebaseerde indicatie van afstand,
verkregen door de berekening van het negatieve puntproduct
[-∞, +∞] Kleinere getallen geven meer vergelijkbare vectoren aan

Retourwaarde

De functie retourneert een scalaire float-waarde die de afstand tussen de twee vectoren aangeeft met behulp van de opgegeven afstandsmetrische waarde.

Er wordt een fout geretourneerd als distance_metric geen geldig metrisch gegeven is en als de opgegeven vectoren niet van het gegevenstype vector zijn.

Examples

Details van de database die in het voorbeeld wordt gebruikt, vindt u op GitHub: Download en importeer het Wikipedia-artikel met Vector Embeddings.

In voorbeelden wordt ervan uitgegaan dat er een tabel bestaat met wikipedia_articles een kolom title_vector van het type vector waarin de insluitingen van Wikipedia-artikelen van de titel worden opgeslagen. title_vector wordt verondersteld een insluiting te zijn die wordt gegenereerd met een insluitmodel, zoals text-embedding-ada-002 of text-embedding-3-small, dat vectoren retourneert met 1536 dimensies.

Voor meer voorbeelden, waaronder end-to-end-oplossingen, gaat u naar de GitHub-opslagplaats Met voorbeelden van Azure SQL Database Vector Search.

Eén. Een vector maken op basis van een JSON-matrix

In het volgende voorbeeld wordt een vector gemaakt met drie dimensies van een tekenreeks met een JSON-matrix.

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. Top 10 vergelijkbare artikelen retourneren op basis van titels

In het volgende voorbeeld worden de tien populairste artikelen geretourneerd die het meest lijken op een bepaald artikel, op basis van de cosinusafstand tussen de titelvectoren.

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. Vergelijkbare artikelen retourneren op basis van specifieke vectorafstand

In het volgende voorbeeld worden alle vergelijkbare artikelen geretourneerd die vergelijkbaar zijn met een bepaald artikel, op basis van de cosinusafstand tussen de titelvectoren, waarbij alleen titels met een afstand kleiner dan 0,3 worden geselecteerd.

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;