Dela via


VECTOR_SEARCH (Transact-SQL) (förhandsversion)

Gäller för: Förhandsversion av SQL Server 2025 (17.x)

Sök efter vektorer som liknar en viss frågevektor med hjälp av en ungefärlig vektorsökningsalgoritm för närmaste grannar. Mer information om hur vektorindexering och vektorsökning fungerar och skillnaderna mellan exakt och ungefärlig sökning finns i Vektorsökning och vektorindex i SQL Database Engine.

Förhandsfunktion

Den här funktionen är i förhandsversion och kan komma att ändras. För att kunna använda den här funktionen måste du aktivera PREVIEW_FEATURESden databasomfångsbegränsade konfigurationen.

Kontrollera de aktuella begränsningarna innan du använder den.

Syntax

Transact-SQL syntaxkonventioner

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]

Tabell där sökningen utförs. Det måste vara en bastabell. Vyer, temporära tabeller, både lokala och globala, stöds inte.

KOLUMN = vector_column

Vektorkolumnen där sökningen utförs. Kolumnen måste vara en vektordatatyp .

SIMILAR_TO = query_vector

Den vektor som används för sökning. Det måste vara en variabel eller en kolumn av vektortyp .

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

Det avståndsmått som används för att beräkna avståndet mellan frågevektorn och vektorerna i den angivna kolumnen. Ett ANN-index (ungefärlig närmaste granne) används endast om ett matchande ANN-index, med samma mått och i samma kolumn, hittas. Om det inte finns några kompatibla ANN-index utlöses en varning och KNN-algoritmen (k-Nearest Neighbor) används.

TOP_N = <k>

Det maximala antalet liknande vektorer som måste returneras. Det måste vara ett positivt heltal.

result_table_alias

Aliaset används för att referera till resultatuppsättningen.

Returnera resultatuppsättning

Resultatuppsättningen VECTOR_SEARCH som returneras av funktionen innehåller:

  • Alla kolumner från tabellen som anges i TABLE argumentet.
  • En ytterligare kolumn med namnet distance, som representerar avståndet mellan vektorn i kolumnen som anges av COLUMN argumentet och vektorn som anges i SIMILAR_TO argumentet.

Avståndskolumnen VECTOR_SEARCH genereras av själva funktionen, medan alla andra kolumner kommer från tabellen som refereras i TABLE argumentet.

Om du använder ett alias för tabellen i TABLE argumentet måste du använda samma alias för att referera till dess kolumner i -instruktionen SELECT . Du kan inte använda det alias som tilldelats till för att referera till VECTOR_SEARCH kolumner från tabellen som anges i TABLE. Det här beteendet är lättare att förstå om du tänker på resultatuppsättningen som skapats genom att ta utdata från VECTOR_SEARCH och slå samman den med tabelldata.

Om tabellen som anges i TABLE argumentet redan innehåller en kolumn med namnet distancekommer beteendet att likna en SQL-koppling mellan två tabeller som delar ett kolumnnamn. I sådana fall måste du använda tabellalias för att skilja kolumnreferenserna åt. Annars uppstår ett fel.

Limitations

Den aktuella förhandsversionen har följande begränsningar:

Endast efterfilter

Vektorsökning sker innan ett predikat tillämpas. Ytterligare predikat tillämpas endast när de mest liknande vektorerna returneras. Följande exempel returnerar de 10 översta raderna med inbäddningar som mest liknar frågevektorn @qvoch tillämpar sedan predikatet WHERE som anges i -satsen. Om ingen av de 10 rader som är associerade med vektorerna som returneras av vektorsökningen accepted har kolumnen lika med 1 är resultatet tomt.

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 inte användas i vyer

VECTOR_SEARCH kan inte användas i brödtexten i en vy.

Examples

Exempel 1

I följande exempel hittar du de 10 mest liknande artiklarna Pink Floyd music style i wikipedia_articles_embeddings tabellen.

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

Exempel 2

Samma som exempel 1, men den här gången tar frågevektorerna från en annan tabell i stället för en variabel.

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;

Exempel 3

Ett grundläggande exempel från slutpunkt till slutpunkt med hjälp av CREATE VECTOR INDEX och den relaterade VECTOR_SEARCH funktionen. Inbäddningarna hånas. I ett verkligt scenario genereras inbäddningar med hjälp av en inbäddningsmodell och AI_GENERATE_EMBEDDINGS, eller ett externt bibliotek som OpenAI SDK.

Följande kodblock visar VECTOR_SEARCH funktionen med falska inbäddningar:

  1. Aktiverar spårningsflaggan, som krävs i den aktuella förhandsversionen.
  2. Skapa en exempeltabell dbo.Articles med en kolumn embedding med datatypsvektor(5).
  3. Infoga exempeldata med falska inbäddningsdata.
  4. Skapa ett vektorindex på dbo.Articles.embedding.
  5. Demonstrera vektorlikhetssökningen VECTOR_SEARCH med funktionen.
-- 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;