Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Vyhledejte vektory podobné danému vektoru dotazu pomocí přibližného algoritmu vektorového vyhledávání nejbližších sousedů. Další informace o tom, jak funguje vektorové indexování a vektorové vyhledávání, a rozdíly mezi přesným a přibližným vyhledáváním najdete v tématu Vektorové vyhledávání a vektorové indexy v databázovém stroji SQL.
Azure SQL Database a databáze SQL ve službě Fabric
Funkce je v náhledu. Než je začnete používat, nezapomeňte si prohlédnout aktuální omezení .
Poznámka:
Jako funkce ve verzi Preview platí, že technologie uvedená v tomto článku podléhá dodatečným podmínkám použití pro verze Microsoft Azure Preview.
Funkce Preview SQL Server 2025
V SQL Server 2025 je tato funkce v náhledu a může se změnit. Chcete-li použít tuto funkci, musíte povolit PREVIEW_FEATURES databáze.
Než je začnete používat, nezapomeňte si prohlédnout aktuální omezení .
Syntax
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 = objekt [AS source_table_alias]
Tabulka, na které se provádí hledání Musí to být základní tabulka. Zobrazení, dočasné tabulky, místní i globální, se nepodporují.
SLOUPEC = vector_column
Vektorový sloupec, ve kterém se vyhledávání provádí. Sloupec musí být datový typ vektoru .
SIMILAR_TO = query_vector
Vektor použitý k hledání. Musí to být proměnná nebo sloupec typu vektoru .
METRIC = { 'kosinus' | 'tečka' | 'euclidean' }
Metrika vzdálenosti použitá k výpočtu vzdálenosti mezi vektorem dotazu a vektory v zadaném sloupci. Index ANN (Přibližný nejbližší soused) se používá pouze v případě, že se najde odpovídající index ANN se stejnou metrikou a ve stejném sloupci. Pokud nejsou k dispozici žádné kompatibilní indexy ANN, vyvolá se upozornění a použije se algoritmus KNN (k-Nearest Neighbor).
TOP_N = <k>
Maximální počet podobných vektorů, které musí být vráceny. Musí to být kladné celé číslo.
result_table_alias
Alias se používá k odkazu na sadu výsledků.
Vrácená sada výsledků
Sada výsledků vrácená VECTOR_SEARCH funkcí zahrnuje:
Všechny sloupce z tabulky zadané v argumentu
TABLEDalší sloupec s názvem
distance, který představuje vzdálenost mezi vektorem ve sloupci určenémCOLUMNargumentem a vektorem zadaným v argumentuSIMILAR_TO.
Sloupec vzdálenosti je generován VECTOR_SEARCH samotnou funkcí, zatímco všechny ostatní sloupce pocházejí z tabulky odkazované v argumentu TABLE .
Pokud v argumentu TABLE použijete alias pro tabulku, musíte stejný alias použít k odkazování na jeho sloupce v SELECT příkazu. Alias přiřazený k VECTOR_SEARCH odkazovaným sloupcům z tabulky zadané v TABLEtabulce nemůžete použít. Toto chování je jednodušší pochopit, pokud si myslíte, že sada výsledků sestavená tak, že vezme výstup VECTOR_SEARCH a sloučí se daty tabulky.
Pokud tabulka zadaná v argumentu TABLE již obsahuje sloupec s názvem distance, bude chování podobné spojení SQL mezi dvěma tabulkami, které sdílejí název sloupce. V takových případech je nutné použít aliasy tabulky k nejednoznačnosti odkazů na sloupce – jinak se vyvolá chyba.
Limitations
Aktuální verze Preview má následující omezení:
Pouze po filtrování
Vektorové vyhledávání probíhá před použitím jakéhokoli predikátu. Další predikáty se použijí až po vrácení většiny podobných vektorů. Následující ukázka vrátí prvních 10 řádků s vkládáním, které jsou nejvíce podobné vektoru @qvdotazu , pak použije predikát zadaný v WHERE klauzuli. Pokud žádný z 10 řádků přidružených k vektorům vráceným vektorovým vyhledáváním nemá accepted sloupec rovnající se 1, výsledek je prázdný.
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 nejde použít v zobrazeních
VECTOR_SEARCH nelze použít v textu zobrazení.
Examples
Příklad 1
Následující příklad najde 10 nejpodobnějších článků Pink Floyd music style v wikipedia_articles_embeddings tabulce.
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
Příklad 2
Stejné jako v příkladu 1, ale tentokrát vektory dotazu přebírají z jiné tabulky místo proměnné.
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')
) AS 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;
Příklad 3
Základní kompletní příklad použití CREATE VECTOR INDEX a související VECTOR_SEARCH funkce. Vložené kódy jsou napodobeny. Ve skutečném scénáři se vkládání generují pomocí modelu vkládání a AI_GENERATE_EMBEDDINGS nebo externí knihovny, jako je OpenAI SDK.
Následující blok kódu demonstruje VECTOR_SEARCH funkci se napodobenými vkládáními:
- Povolí příznak trasování, který je nezbytný v aktuální verzi Preview.
- Vytvořte ukázkovou tabulku
dbo.Articlesse sloupcemembeddings vektorem datového typu(5). - Vložte ukázková data pomocí napodobení vložených dat.
- Vytvořte vektorový index na
dbo.Articles.embedding. - Předveďte hledání vektorové podobnosti pomocí
VECTOR_SEARCHfunkce.
-- 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;