Megosztás a következőn keresztül:


VECTOR_SEARCH (Transact-SQL) (előzetes verzió)

Vonatkozik a következőkre: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Az adott lekérdezésvektorokhoz hasonló vektorok keresése a legközelebbi szomszéd vektorkeresési algoritmus használatával. Ha többet szeretne megtudni a vektorindexelés és a vektorkeresés működéséről, valamint a pontos és közelítő keresés közötti különbségekről, tekintse meg a vektorkeresést és a vektorindexeket az SQL Database Engine-ben.

Azure SQL Database és SQL Database a Fabricben

A funkció előzetesben van. Használat előtt ellenőrizze az aktuális korlátozásokat .

Megjegyzés:

Előzetes verziójú funkcióként a cikkben bemutatott technológia a Microsoft Azure előzetes verziójának kiegészítő használati feltételeire vonatkozik.

SQL Server 2025 Preview funkció

Az SQL Server 2025-ben ez a funkció előnézetben van, és változhat. A funkció használatához engedélyeznie kell az PREVIEW_FEATURESadatbázis hatókörébe tartozó konfigurációt.

Használat előtt ellenőrizze az aktuális korlátozásokat .

Syntax

Transact-SQL szintaxis konvenciók

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 = objektum [AS source_table_alias]

Tábla, amelyen a keresést végrehajtja. Alaptáblának kell lennie. A nézetek, a helyi és a globális ideiglenes táblák nem támogatottak.

OSZLOP = vector_column

Az a vektoroszlop, amelyben a keresés történik. Az oszlopnak vektor adattípusnak kell lennie.

SIMILAR_TO = query_vector

A kereséshez használt vektor. Változónak vagy vektor típusú oszlopnak kell lennie.

METRIC = { 'cosine' | "pont" | "euklideszi" }

A lekérdezésvektor és a megadott oszlop vektorai közötti távolság kiszámításához használt távolságmetrika. Ann (közelítő legközelebbi szomszéd) indexet csak akkor használ a rendszer, ha egy egyező ANN-index található ugyanahhoz a metrikához és ugyanazon az oszlophoz. Ha nincsenek kompatibilis ANN-indexek, a rendszer figyelmeztetést ad, és a KNN (k-Legközelebbi szomszéd) algoritmust használja.

TOP_N = <k>

A visszaadandó hasonló vektorok maximális száma. Pozitív egész számnak kell lennie.

result_table_alias

Az alias az eredményhalmazra hivatkozik.

Eredményhalmaz visszaadása

A függvény által visszaadott eredményhalmaz a VECTOR_SEARCH következőket tartalmazza:

  • Az argumentumban megadott tábla összes oszlopa TABLE .

  • Egy további oszlop neve distance, amely az argumentum által COLUMN megadott oszlopban lévő vektor és az argumentumban SIMILAR_TO megadott vektor közötti távolságot jelöli.

A távolság oszlopot maga a VECTOR_SEARCH függvény hozza létre, míg az összes többi oszlop az argumentumban TABLE hivatkozott táblából származik.

Ha az argumentumban egy aliast használ a TABLE táblához, ugyanazt az aliast kell használnia az utasítás oszlopaira SELECT való hivatkozáshoz. A megadott VECTOR_SEARCHtáblából származó oszlopok hivatkozásához TABLE rendelt alias nem használható. Ez a viselkedés könnyebben érthető, ha úgy gondolja, hogy az eredményhalmaz a táblaadatokkal VECTOR_SEARCH való összevonásával jön létre.

Ha az TABLE argumentumban megadott tábla már tartalmaz egy elnevezett distanceoszlopot, a viselkedés hasonló lesz az oszlopnévvel rendelkező két tábla közötti SQL-illesztéshez. Ilyen esetekben tábla aliasokat kell használnia az oszlophivatkozások egyértelműsítéséhez – ellenkező esetben hiba lép fel.

Limitations

Az aktuális előzetes verzióra az alábbi korlátozások vonatkoznak:

Csak utószűrés

A vektorkeresés a predikátum alkalmazása előtt történik. A további predikátumok csak a leginkább hasonló vektorok visszaadása után lesznek alkalmazva. Az alábbi minta a lekérdezésvektorhoz @qvleginkább hasonló beágyazásokat tartalmazó első 10 sort adja vissza, majd alkalmazza a WHERE záradékban megadott predikátumot. Ha a vektorkeresés által visszaadott vektorokhoz társított 10 sor egyike sem rendelkezik accepted 1 oszlopmal, az eredmény üres.

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 nem használható nézetekben

VECTOR_SEARCH nem használható a nézet törzsében.

Examples

1. példa

Az alábbi példa a táblázatban szereplő Pink Floyd music style 10 leginkább hasonló cikket wikipedia_articles_embeddings találja meg.

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

2. példa

Ugyanaz, mint az 1. példában, de ezúttal a lekérdezésvektorok változó helyett egy másik táblából származnak.

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;

3. példa

Egy alapszintű, végpontok közötti példa a használatával CREATE VECTOR INDEX és a kapcsolódó VECTOR_SEARCH függvénnyel. A beágyazások ki vannak gúnyolva. Valós forgatókönyv esetén a beágyazások beágyazási modell és AI_GENERATE_EMBEDDINGS, vagy külső kódtár, például OpenAI SDK használatával jönnek létre.

Az alábbi kódblokk a VECTOR_SEARCH modellbeágyazással rendelkező függvényt mutatja be:

  1. Engedélyezi a nyomkövetési jelzőt, amely az aktuális előzetes verzióban szükséges.
  2. Hozzon létre egy mintatáblát dbo.Articles egy embedding rendelkező oszlopmal.
  3. Mintaadatok beszúrása a makettbe ágyazott adatokkal.
  4. Vektorindex létrehozása a oldalon dbo.Articles.embedding
  5. A vektoros hasonlóság keresésének bemutatása a VECTOR_SEARCH függvénnyel.
-- 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;