Delen via


VECTOR_SEARCH (Transact-SQL) (preview)

Van toepassing op: SQL Server 2025 (17.x) Preview

Zoek naar vectoren die vergelijkbaar zijn met een bepaalde queryvector met behulp van een bij benadering dichtstbijzijnde buren vectorzoekingsalgoritmen. Raadpleeg vectorzoekopdrachten en vectorindexen in de SQL Database Engine voor meer informatie over hoe vectorindexering en vectorzoekopdrachten werken, en de verschillen tussen exacte en geschatte zoekopdrachten.

Previewfunctie

Deze functie is in preview en kan worden gewijzigd. Als u deze functie wilt gebruiken, moet u de configuratie van het PREVIEW_FEATURESdatabasebereik inschakelen.

Zorg ervoor dat u de huidige beperkingen bekijkt voordat u deze gebruikt.

Syntax

Transact-SQL syntaxis-conventies

VECTOR_SEARCH(
    TABLE = object [ AS source_table_alias ]
    , COLUMN = vector_column
    , SIMILAR_TO = query_vector
    , METRIC = { 'cosine' | 'dot' | 'euclidean' }
    , TOP_N = k
) [ AS result_table_alias ]

Arguments

TABLE = object [AS source_table_alias]

Tabel waarop de zoekopdracht wordt uitgevoerd. Het moet een basistabel zijn. Weergaven, tijdelijke tabellen, zowel lokaal als globaal, worden niet ondersteund.

KOLOM = vector_column

De vectorkolom waarin de zoekopdracht wordt uitgevoerd. De kolom moet een vectorgegevenstype zijn.

SIMILAR_TO = query_vector

De vector die wordt gebruikt om te zoeken. Het moet een variabele of een kolom van vectortype zijn.

METRIC = { 'cosinus' | "dot" | "euclidean" }

De metrische afstand die wordt gebruikt om de afstand tussen de queryvector en de vectoren in de opgegeven kolom te berekenen. Een ANN-index (Bij benadering dichtstbijzijnde buur) wordt alleen gebruikt als een overeenkomende ANN-index, met dezelfde metrische waarde en in dezelfde kolom, wordt gevonden. Als er geen compatibele ANN-indexen zijn, wordt er een waarschuwing gegenereerd en wordt het KNN-algoritme (k-Nearest Neighbor) gebruikt.

TOP_N = <k>

Het maximum aantal vergelijkbare vectoren dat moet worden geretourneerd. Het moet een positief geheel getal zijn.

result_table_alias

De alias wordt gebruikt om te verwijzen naar de resultatenset.

Resultaatset retourneren

De resultatenset die door de VECTOR_SEARCH functie wordt geretourneerd, bevat:

  • Alle kolommen uit de tabel die in het TABLE argument zijn opgegeven.
  • Een extra kolom met de naam distance, die de afstand aangeeft tussen de vector in de kolom die is opgegeven door het COLUMN argument en de vector die in het SIMILAR_TO argument is opgegeven.

De afstandskolom wordt gegenereerd door de VECTOR_SEARCH functie zelf, terwijl alle andere kolommen afkomstig zijn uit de tabel waarnaar in het TABLE argument wordt verwezen.

Als u een alias gebruikt voor de tabel in het TABLE argument, moet u dezelfde alias gebruiken om te verwijzen naar de kolommen in de SELECT instructie. U kunt de alias die is toegewezen om te VECTOR_SEARCH verwijzen naar kolommen uit de tabel die is opgegeven in TABLEniet gebruiken. Dit gedrag is gemakkelijker te begrijpen als u denkt aan de resultatenset die is gemaakt door de uitvoer van VECTOR_SEARCH en samen te voegen met de tabelgegevens.

Als de tabel die is opgegeven in het TABLE argument al een kolom met de naam distancebevat, is het gedrag vergelijkbaar met een SQL-join tussen twee tabellen die een kolomnaam delen. In dergelijke gevallen moet u tabelaliassen gebruiken om de kolomverwijzingen niet eenduidig te maken. Anders wordt er een fout gegenereerd.

Limitations

De huidige preview heeft de volgende beperkingen:

Alleen nafilter

Vectorzoekopdrachten vindt plaats voordat u een predicaat toepast. Extra predicaten worden pas toegepast nadat de meest vergelijkbare vectoren zijn geretourneerd. Het volgende voorbeeld retourneert de bovenste 10 rijen met insluitingen die het meest lijken op de queryvector @qven past vervolgens het predicaat toe dat is opgegeven in de WHERE component. Als geen van de 10 rijen die zijn gekoppeld aan de vectoren die door de vectorzoekopdracht worden geretourneerd, de accepted kolom gelijk is aan 1, is het resultaat leeg.

SELECT TOP (10) s.id,
                s.title,
                r.distance
FROM VECTOR_SEARCH(
         TABLE = dbo.sessions AS s,
         COLUMN = embedding,
         SIMILAR_TO = @qv,
         METRIC = 'cosine',
         TOP_N = 10
     ) AS r
WHERE accepted = 1
ORDER BY r.distance;

VECTOR_SEARCH kan niet worden gebruikt in weergaven

VECTOR_SEARCH kan niet worden gebruikt in de hoofdtekst van een weergave.

Examples

Voorbeeld 1

In het volgende voorbeeld worden de 10 artikelen gevonden die het meest lijken op de Pink Floyd music style artikelen in de wikipedia_articles_embeddings tabel.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) s.id,
                s.title,
                r.distance
FROM VECTOR_SEARCH(
        TABLE = [dbo].[wikipedia_articles_embeddings] as t,
        COLUMN = [content_vector],
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 10
    ) AS s
ORDER BY s.distance

Voorbeeld 2

Hetzelfde als voorbeeld 1, maar deze keer nemen de queryvectoren uit een andere tabel in plaats van een variabele.

CREATE TABLE #t
(
    id INT,
    q NVARCHAR (MAX),
    v VECTOR(1536)
);

INSERT INTO #t
SELECT id,
       q,
       AI_GENERATE_EMBEDDINGS(q USE MODEL Ada2Embeddings)
FROM (VALUES
        (1, N'four legged furry animal'),
        (2, N'pink floyd music style')
    ) S(id, q);

SELECT TOP (10) t.id,
                s.distance,
                t.title
FROM #t AS qv
CROSS APPLY
    VECTOR_SEARCH(
        TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
        COLUMN = [content_vector],
        SIMILAR_TO = qv.v,
        METRIC = 'cosine',
        TOP_N = 10
    ) AS s
WHERE qv.id = 2
ORDER BY s.distance;

Voorbeeld 3

Een eenvoudig end-to-end-voorbeeld met behulp van CREATE VECTOR INDEX en de gerelateerde VECTOR_SEARCH functie. De insluitingen worden gesimuleerd. In een praktijkscenario worden insluitingen gegenereerd met behulp van een insluitmodel en AI_GENERATE_EMBEDDINGS, of een externe bibliotheek zoals OpenAI SDK.

In het volgende codeblok ziet u de VECTOR_SEARCH functie met gesimuleerde insluitingen:

  1. Hiermee schakelt u de traceringsvlag in die nodig is in de huidige preview.
  2. Maak een voorbeeldtabel dbo.Articles met een kolom embedding met gegevenstypevector (5).
  3. Voeg voorbeeldgegevens in met gesimuleerde insluitingsgegevens.
  4. Maak een vectorindex op dbo.Articles.embedding.
  5. Demonstreert de vector-overeenkomstenzoekopdracht met de VECTOR_SEARCH functie.
-- Step 0: Enable Preview Feature
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO

-- Step 1: Create a sample table with a VECTOR(5) column
CREATE TABLE dbo.Articles
(
    id INT PRIMARY KEY,
    title NVARCHAR(100),
    content NVARCHAR(MAX),
    embedding VECTOR(5) -- mocked embeddings
);
GO

-- Step 2: Insert sample data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
GO

-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (METRIC = 'cosine', TYPE = 'diskann');
GO

-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3)
    t.id,
    t.title,
    t.content,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = Articles AS t,
        COLUMN = embedding,
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 3
    ) AS s
ORDER BY s.distance, t.title;