Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
TABLEargumentet. - En ytterligare kolumn med namnet
distance, som representerar avståndet mellan vektorn i kolumnen som anges avCOLUMNargumentet och vektorn som anges iSIMILAR_TOargumentet.
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:
- Aktiverar spårningsflaggan, som krävs i den aktuella förhandsversionen.
- Skapa en exempeltabell
dbo.Articlesmed en kolumnembeddingmed datatypsvektor(5). - Infoga exempeldata med falska inbäddningsdata.
- Skapa ett vektorindex på
dbo.Articles.embedding. - Demonstrera vektorlikhetssökningen
VECTOR_SEARCHmed 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;