Sdílet prostřednictvím


VECTOR_SEARCH (Transact-SQL) (Ukázka)

Platí na: SQL Server 2025 (17.x) Azure SQL DatabaseSQL 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

Transact-SQL konvence syntaxe

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 TABLE

  • Další sloupec s názvem distance, který představuje vzdálenost mezi vektorem ve sloupci určeném COLUMN argumentem a vektorem zadaným v argumentu SIMILAR_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:

  1. Povolí příznak trasování, který je nezbytný v aktuální verzi Preview.
  2. Vytvořte ukázkovou tabulku dbo.Articles se sloupcem embedding s vektorem datového typu(5).
  3. Vložte ukázková data pomocí napodobení vložených dat.
  4. Vytvořte vektorový index na dbo.Articles.embedding.
  5. Předveďte hledání vektorové podobnosti pomocí VECTOR_SEARCH funkce.
-- 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;