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.

Fontos

Az optimális teljesítmény és a legújabb vektorkeresési képességek eléréséhez használja a legújabb verzióval létrehozott vektorindexeket. A meglévő indexek frissítésével és a verziók összehasonlításával kapcsolatos további információkért lásd: CREATE VECTOR INDEX – A vektorindexek frissítése a legújabb verzióra.

Regionális rendelkezésre állás

Ez a funkció az Azure SQL Database-ben és az SQL Database-ben van üzembe helyezve a Microsoft Fabricben. A bevezetés során a rendelkezésre állás és a működés régiónként és indexverziónként eltérő lehet. Ha egy szolgáltatás vagy szintaxis nem érhető el, az üzembe helyezés befejeződése után automatikusan elérhetővé válik. Az aktuális regionális rendelkezésre állási állapotot a Szolgáltatás rendelkezésre állása régiónként című témakörben tekintheti meg.

Figyelmeztetés

Elavulással kapcsolatos értesítés: A TOP_N paraméter VECTOR_SEARCH elavult, és csak a korábbi verzióvektorindexekkel való visszamenőleges kompatibilitás érdekében van fenntartva. Az új implementációknak inkább szintaxist kell használniuk SELECT TOP (N) WITH APPROXIMATE . További információ: Szintaxis.

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 .

Megjegyzés:

A Vektorindexek legújabb verziója jelenleg csak az Azure SQL Database-ben és a Microsoft Fabric SQL Database-ben érhető el.

Főbb fejlesztések a legújabb vektorindexekkel

A legújabb verzióval létrehozott vektorindexek jelentős fejlesztéseket vezetnek be:

  • Teljes DML-támogatás: Eltávolítja azt a korábbi korlátozást, amely csak olvashatóvá tette a vektoros indexelt táblákat az index létrehozása után. Mostantól az INSERT, UPDATE, DELETE és MERGE műveleteket is végrehajthatja, miközben a vektorindex funkcióit automatikus, valós idejű indexkarbantartással tartja fenn
  • Iteratív szűrés: A WHERE záradék predikátumai a vektorkeresési folyamat során kerülnek alkalmazásra, nem a lekérés után
  • Optimalizálóalapú: A lekérdezésoptimalizáló automatikusan meghatározza, hogy a DiskANN-indexet vagy a kNN-keresést használja-e a lekérdezési jellemzők alapján
  • Speciális kvantálás: A vektorkvantálási technikák integrálva lettek a jobb tárolási hatékonyság és a gyorsabb lekérdezési teljesítmény érdekében, mivel ezek az optimalizálások transzparensek a felhasználók számára

Syntax

Transact-SQL szintaxis konvenciók

A legújabb verziójú vektorindexekkel:

Fontos

A legújabb vektorindex-verziót használó táblák lekérdezéséhez a közelítő vektorkeresésnek a TOP (N) APPROXIMATE szintaxist kell használnia. Ez a szintaxiskövetelmény azt jelzi, hogy a lekérdezés explicit módon a legközelebbi szomszédhoz közeli eredményeket kéri.

SELECT TOP (N) WITH APPROXIMATE
    column_list
FROM VECTOR_SEARCH(
        TABLE = object [ AS source_table_alias ]
        , COLUMN = vector_column
        , SIMILAR_TO = query_vector
        , METRIC = { 'cosine' | 'dot' | 'euclidean' }
    ) [ AS result_table_alias ]
[ WHERE predicate ]
ORDER BY distance;

Korábbi verziójú vektorindexekkel:

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 ]

Fontos

A TOP_N paraméter nem támogatott a legújabb verzióvektorindexekkel. Használja a SELECT TOP (N) WITH APPROXIMATE fenti szintaxist. További információt az örökölt szintaxist használó hiba című témakörben talál.

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>

Figyelmeztetés

Ez a paraméter elavult, és csak a korábbi verzióvektorindexekkel való visszamenőleges kompatibilitás érdekében van fenntartva. A legújabb verzióindexekhez használja SELECT TOP (N) WITH APPROXIMATE inkább a szintaxist. Az új implementációknak a legújabb szintaxist kell használniuk.

A visszaadandó hasonló vektorok maximális száma. Pozitív egész számnak kell lennie. Ez a paraméter nem támogatott a legújabb verzióval létrehozott vektorindexekkel.

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.

Fontos

Az distance oszlop az egyetlen érvényes rendezési kulcs a hozzávetőleges vektorkeresési eredményekhez.

Limitations

  • Csak növekvő sorrendben: Az distance oszlopot növekvő sorrendben (ASC) kell rendezni. A csökkenő sorrend (DESC) nem támogatott.

Verzióspecifikus viselkedés

A viselkedés a VECTOR_SEARCH vektorindex verziójától függően változik.

Korábbi vektorindex-verziók

Megjegyzés:

Ezek a korlátozások csak a korábbi verziókkal létrehozott vektorindexekre vonatkoznak. Migrálás a legújabb verzióra az iteratív szűrés engedélyezéséhez. Lásd: Migrálás a korábbi vektorindex-verziókból.

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;

Általános korlátozások

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

Examples

Fontos

A legújabb vektorindex-verziót használó táblák lekérdezéséhez a hozzávetőleges vektorkeresésnek a szintaxist TOP (N) WITH APPROXIMATE kell használnia. Ez a szintaxiskövetelmény azt jelzi, hogy a lekérdezés explicit módon a legközelebbi szomszédhoz közeli eredményeket kéri.

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

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);

SELECT TOP (10) WITH APPROXIMATE
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles_embeddings AS t,
        COLUMN = content_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
ORDER BY r.distance;

A lekérdezés szintaxisa a vektorindex verziójától függ:

Vektorindex verziója Syntax-példa
Legutóbbi verzió Használat SELECT TOP (N) WITH APPROXIMATE paraméter nélkül TOP_N
Korábbi verziók (elavult) Paraméter használata TOP_N a függvényben VECTOR_SEARCH

Jótanács

A vektorindex verziójának meghatározásához lásd: Migrálás a korábbi vektorindex-verziókból.

Korábbi verzióindexek esetén (elavult szintaxis):

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);

SELECT TOP (10)
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles_embeddings AS t,
        COLUMN = content_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 10  -- Deprecated: Use SELECT TOP (N) WITH APPROXIMATE instead
    ) AS r
ORDER BY r.distance;

Megjegyzés:

Ha a paramétert a TOP_N legújabb verzióvektorindexekkel használja, msg 42274-es hibát ad vissza. Részletes információkért tekintse meg a Várt viselkedések szakaszban az örökölt szintaxist használó hiba című témakört.

B. Munkafolyamat befejezése indexek létrehozásával

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.

Megjegyzés:

A legújabb verzióvektorindexekhez legalább 100 adatsor szükséges az index létrehozása előtt. Ez a példa 100 sort szúr be, hogy megfeleljen ennek a követelménynek. További információ: Minimális adatkövetelmények.

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

  1. Engedélyezi az előzetes verziójú funkciót (csak az SQL Server 2025-höz szükséges; nem szükséges az Azure SQL Database-hez vagy a Fabricben található SQL Database-hez).
  2. Hozzon létre egy mintatáblát dbo.Articles egy embedding rendelkező oszlopmal.
  3. Szúrjon be 100 sornyi mintaadatot a mintabeágyazási 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 (SQL Server 2025 only)
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 (100 rows required for latest version indexes)
INSERT INTO Articles (id, title, content, embedding)
SELECT
    value AS id,
    'Article ' || [value],
    'Content for article ' || [value],
    CAST(JSON_ARRAY(
        CAST(value * 0.01 AS FLOAT),
        CAST(value * 0.02 AS FLOAT),
        CAST(value * 0.03 AS FLOAT),
        CAST(value * 0.04 AS FLOAT),
        CAST(value * 0.05 AS FLOAT)
    ) AS VECTOR(5))
FROM GENERATE_SERIES(1, 100);
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) WITH APPROXIMATE
    t.id,
    t.title,
    t.content,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = Articles AS t,
        COLUMN = embedding,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS s
ORDER BY s.distance, t.title;

A lekérdezés szintaxisa a vektorindex verziójától függ:

Vektorindex verziója Syntax-példa
Legutóbbi verzió Használat SELECT TOP (N) WITH APPROXIMATE paraméter nélkül TOP_N
Korábbi verziók (elavult) Paraméter használata TOP_N a függvényben VECTOR_SEARCH

Korábbi verzióindexek esetén (elavult szintaxis):

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  -- Deprecated: Use SELECT TOP (N) WITH APPROXIMATE instead
    ) AS s
ORDER BY s.distance, t.title;

C. Vektorkeresés iteratív szűréssel

Az alábbi példa az iteratív szűrést mutatja be a legújabb verzióvektorindexekkel. A lekérdezés hasonló cikkeket talál, miközben predikátumokat alkalmaz a keresési folyamat során.

A legújabb verzióindexekkel a WHERE záradék predikátumai a vektorkeresési folyamat során (nem utána) lesznek alkalmazva. A motor addig keres, amíg meg nem találja az összes feltételnek megfelelő 5 megfelelő sort:

  • Vektoros hasonlóság a "gépi tanulási algoritmusokhoz"
  • A kategória egyenlő a "Technológia" kategóriával
  • A közzétett állapot értéke 1

Ez biztosítja, hogy pontosan 5 találatot kapjon (ha léteznek), a keresési paraméterek manuális finomhangolása nélkül. A korábbi és a legújabb verziók részletes összehasonlításáért tekintse meg az Iteratív szűrési viselkedést a Várt viselkedések szakaszban.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning algorithms' USE MODEL Ada2Embeddings);

SELECT TOP (5) WITH APPROXIMATE
    t.id,
    t.title,
    t.category,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = content_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
WHERE t.category = 'Technology'
  AND t.published = 1
ORDER BY r.distance;

Megjegyzés:

Bizonyos SQL-műveletek, például a GROUP BY, az aggregátumfüggvények és az ablakfüggvények al lekérdezési mintát igényelnek. További részletekért lásd: Vektorkeresés kombinálása más SQL-műveletekkel.

D. Többtáblás illesztések az INNER JOIN használatával

Az alábbi minta az INNER JOIN-t mutatja be több táblára való szűréssel. Akkor használható, ha a beágyazások a fő entitásadatoktól eltérő táblában vannak tárolva.

-- Assuming a schema with separate tables for articles and embeddings
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence and machine learning' USE MODEL Ada2Embeddings);

SELECT TOP (10) WITH APPROXIMATE
    a.id,
    a.title,
    a.category,
    vs.distance
FROM wikipedia_articles a
INNER JOIN VECTOR_SEARCH(
    TABLE = wikipedia_articles_embeddings AS e,
    COLUMN = content_vector,
    SIMILAR_TO = @qv,
    METRIC = 'cosine'
) AS vs ON a.id = e.article_id
WHERE e.approved = 1                           -- Iterative filter on embedding table
  AND a.category IN ('Technology', 'Science')  -- Filter on main table
  AND a.views > 50000
ORDER BY vs.distance;

A példa főbb jellemzői:

  • Tábla alias hatóköre: A forrás aliasa eTABLE = wikipedia_articles_embeddings AS e a WHERE záradékban érhető el az iteratív szűréshez a legújabb verzióindexekkel

Várt viselkedések

Hiba az örökölt szintaxis használatával

Ha a paramétert TOP_NVECTOR_SEARCH a legújabb verzióvektorindexkel rendelkező táblák lekérdezésekor próbálja használni, az SQL Server a következő hibát adja vissza:

Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.

A hiba megoldása:

  1. TOP_N A paraméter eltávolítása a VECTOR_SEARCH függvényből
  2. Szintaxis használata SELECT TOP (N) WITH APPROXIMATE helyett

Helytelen (hibát okoz a legújabb verzióindex esetén):

SELECT TOP (10) 
    t.id,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 10  -- This parameter causes the error with latest version indexes
    ) AS r;

Helyes (a legújabb verzióindexkel működik):

SELECT TOP (10) WITH APPROXIMATE  -- Specify TOP and WITH APPROXIMATE here
    t.id,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
        -- No TOP_N parameter
    ) AS r
ORDER BY r.distance;

Iteratív szűrési viselkedés

A legújabb verzió jelentős fejlesztéseket vezet be a korábbi vektorindex-verziókhoz:

Tulajdonság Korábbi verzió Legutóbbi verzió
Predikátum alkalmazás A relációs predikátumokat azután alkalmazták, hogy a vektorkeresés rögzített számú legközelebbi szomszédot adott vissza (csak utószűrést követően). A relációs predikátumok alkalmazása a vektorkeresési folyamat során történik (iteratív szűrés)
Eredmény teljessége A lekérdezések kevesebb sort – vagy egyetlen sort sem – adhatnak vissza, ha a kezdeti legközelebbi szomszédok nem felelnek meg a szűrőknek, még akkor sem, ha a megfelelő sorok léteztek A lekérdezések a várt számú sort adják vissza, ha a megfelelő adatok léteznek, manuális finomhangolás vagy lekérdezés-átírás nélkül
TOP (N) hangolás A felhasználóknak gyakran kellett kitalálniuk vagy túlértékelni a TOP (N) értékeket a szűrés utáni kompenzáláshoz Nem kell kitalálni a TOP (N) értékeket. A motor addig keres, amíg elegendő megfelelő sor nem található, vagy a keresési terület kimerül
Lekérdezésoptimalizálás Nem alkalmazható Az SQL Server automatikusan kiválasztja a leghatékonyabb végrehajtási stratégiát, beleértve a vektorindex-keresések és a kNN-vizsgálatok közötti váltást, ha szükséges

Az iteratív szűrés gyakorlati példája : C. példa: Vektorkeresés iteratív szűréssel.

ORDER BY záradékra vonatkozó követelmények

A használat során SELECT TOP (N) WITH APPROXIMATEaz ORDER BY záradéknak konkrét követelményei vannak:

  • AZ ORDER BY függvénynek jelen kell lennie: Az ORDER BY záradék nélküli lekérdezések hiba miatt meghiúsulnak.
  • Csak a távolságoszlop engedélyezett: Az ORDER BY záradéknak csak a VECTOR_SEARCH eredményhalmaz távolságoszlopára kell hivatkoznia. A további oszlopok belevétele hiba miatt meghiúsul. Ha több oszlop szerint szeretne rendezni, használja a Multiple ORDER BY oszlopban leírt al lekérdezési mintát.
  • Csak növekvő sorrendben: A távolság oszlopot növekvő sorrendben (ASC) kell rendezni. A csökkenő sorrend (DESC) nem támogatott.

Érvényes RENDELÉSI BY:

SELECT TOP (10) WITH APPROXIMATE
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE = products,
    COLUMN = embedding,
    SIMILAR_TO = @query_vector,
    METRIC = 'cosine'
) AS r
INNER JOIN products t ON t.id = r.id
ORDER BY r.distance;  -- ✓ Valid

Érvénytelen ORDER BY minták:

-- Missing ORDER BY
SELECT TOP (10) WITH APPROXIMATE
    r.distance
FROM VECTOR_SEARCH(
    TABLE = products,
    COLUMN = embedding,
    SIMILAR_TO = @query_vector,
    METRIC = 'cosine'
) AS r;
-- ✗ Error Msg 42248: APPROXIMATE cannot be used in a query without ORDER BY

-- Multiple columns in ORDER BY
SELECT TOP (10) WITH APPROXIMATE
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE = products,
    COLUMN = embedding,
    SIMILAR_TO = @query_vector,
    METRIC = 'cosine'
) AS r
INNER JOIN products t ON t.id = r.id
ORDER BY r.distance, t.title;
-- ✗ Error Msg 42271: TOP WITH APPROXIMATE and VECTOR_SEARCH requires ORDER BY 
-- on distance column ascending, and no other columns

-- Descending order
SELECT TOP (10) WITH APPROXIMATE
    r.distance
FROM VECTOR_SEARCH(
    TABLE = products,
    COLUMN = embedding,
    SIMILAR_TO = @query_vector,
    METRIC = 'cosine'
) AS r
ORDER BY r.distance DESC;
-- ✗ Error Msg 42271: TOP WITH APPROXIMATE and VECTOR_SEARCH requires ORDER BY 
-- on distance column ascending, and no other columns

Viselkedés vektorindex nélkül

VECTOR_SEARCH akkor is végrehajthat lekérdezéseket, ha a céloszlopon nincs vektorindex. Index nélkül a lekérdezés teljes táblavizsgálatot végez (k-legközelebbi szomszéd (kNN) kereséssel az összes sor távolságának kiszámításához.

Lekérdezési viselkedés TOP ÉS KÖZELÍTŐ érték nélkül

Ha nem SELECT TOP (N) WITH APPROXIMATEhasználjaVECTOR_SEARCH, a lekérdezés viselkedése TOP a feltételek meglététől ORDER BY és a záradékoktól függ:

  • Nincs TOP, nincs ORDER BY vagy ORDER BY nem távolság: Teljes táblázatos vizsgálat (találgatásos keresés), amely kiszámítja és visszaadja az összes sor távolságait
  • TOP (nincs HOZZÁVETŐLEGES) az ORDER BY távolsággal: kNN -keresésként (k-legközelebbi szomszédok) hajtja végre, ami a legközelebbi szomszédkeresés

Példa – Teljes vizsgálat távolságoszloppal:

-- Returns all rows with calculated distances
SELECT 
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE = dbo.wikipedia_articles AS t,
    COLUMN = title_vector,
    SIMILAR_TO = @qv,
    METRIC = 'cosine'
) AS r
ORDER BY t.id;  -- Not ordering by distance

Példa – kNN-keresés (pontos legközelebbi szomszédok):

-- Returns exact top 10 nearest neighbors using kNN
SELECT TOP (10)
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE = dbo.wikipedia_articles AS t,
    COLUMN = title_vector,
    SIMILAR_TO = @qv,
    METRIC = 'cosine'
) AS r
ORDER BY r.distance;  -- No WITH APPROXIMATE = exact kNN

Ha függvény nélkül VECTOR_SEARCH használja SELECT TOP (N) WITH APPROXIMATE a lekérdezést, az hibát eredményez. A WITH APPROXIMATE záradék megköveteli, hogy egy VECTOR_SEARCH függvény jelen legyen.

Helytelen – Ez a lekérdezés sikertelen:

-- Error: WITH APPROXIMATE requires VECTOR_SEARCH
SELECT TOP (10) WITH APPROXIMATE
    id,
    title,
    VECTOR_DISTANCE('cosine', title_vector, @qv) AS distance
FROM dbo.wikipedia_articles
WHERE title_vector IS NOT NULL
ORDER BY VECTOR_DISTANCE('cosine', title_vector, @qv);

Helyes – Használja a VECTOR_SEARCH:

-- Correct: WITH APPROXIMATE with VECTOR_SEARCH
SELECT TOP (10) WITH APPROXIMATE
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE = dbo.wikipedia_articles AS t,
    COLUMN = title_vector,
    SIMILAR_TO = @qv,
    METRIC = 'cosine'
) AS r
ORDER BY r.distance;

TRUNCATE TABLE-korlátozások

A vektorindexekkel rendelkező táblákat nem lehet csonkolja a használatával TRUNCATE TABLE. Az összes adat eltávolítása vektorindexelt táblából:

  1. A vektorindex elvetése
  2. A táblázat csonkálása
  3. A táblázat újratöltése legalább 100 sorból
  4. A vektorindex ismételt létrehozása

Példa munkafolyamat:

-- Step 1: Drop the vector index
DROP INDEX idx_vector ON wikipedia_articles;

-- Step 2: Truncate the table
TRUNCATE TABLE wikipedia_articles;

-- Step 3: Repopulate with data (at least 100 rows)
-- ... insert operations ...

-- Step 4: Recreate the vector index
CREATE VECTOR INDEX idx_vector 
ON wikipedia_articles(title_vector)
WITH (METRIC = 'cosine');

A lekérdezések végrehajtási viselkedésének szabályozásához táblázatos tippeket használhat a VECTOR_SEARCH függvénnyel. A FORCE_ANN_ONLY táblamutató arra kényszeríti a lekérdezésoptimalizálót, hogy csak a legközelebbi szomszéd (ANN) indexet használja, még akkor is, ha az optimalizáló más végrehajtási stratégiát választhat.

Szintaxis:

FROM VECTOR_SEARCH(
    TABLE      = table_name,
    COLUMN     = column_name,
    SIMILAR_TO = vector_value,
    METRIC     = 'metric_name'
) AS alias WITH (FORCE_ANN_ONLY)

Example:

Az alábbi példa a legközelebbi szomszédindex használatát kényszeríti ki a vektorkeresési lekérdezéshez:

DECLARE @qembedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence' USE MODEL Ada2Embeddings);

SELECT TOP 50 WITH APPROXIMATE
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
    TABLE      = dbo.wikipedia_articles AS t,
    COLUMN     = title_vector,
    SIMILAR_TO = @qembedding,
    METRIC     = 'cosine'
) AS r WITH (FORCE_ANN_ONLY)
ORDER BY r.distance;

Akkor használja FORCE_ANN_ONLY , ha meg szeretné győződni arról, hogy a lekérdezés a legközelebbi szomszédindex-stratégiát használja, felülírva az optimalizáló automatikus stratégiaválasztását.

Megjegyzés:

A használathoz FORCE_ANN_ONLY mindkettő szükséges:

  • Vektorindex a céloszlopon
  • SELECT TOP (N) WITH APPROXIMATE a lekérdezésben

Ha valamelyik követelmény hiányzik, a lekérdezés meghiúsul, mert nem tudja használni a tipp által kényszeríthető legközelebbi szomszéd stratégiát.

Vektorkeresés kombinálása más SQL-műveletekkel

A VECTOR_SEARCH függvénynek TOP (N) WITH APPROXIMATE speciális követelményei vannak a használatára vonatkozóan. Egyes SQL-műveletek közvetlenül használhatók vektorkereséssel, míg másokhoz al lekérdezési minta szükséges.

Alkonyatmintát igénylő műveletek

Ha olyan műveleteket kell végrehajtania, amelyek nem kompatibilisek közvetlenül a műveletekkel TOP (N) WITH APPROXIMATE, használjon vektorkeresést egy al lekérdezésben (belső lekérdezésben), majd alkalmazza a műveleteket a külső lekérdezésben. Ez a minta fenntartja a hozzávetőleges vektorkeresés teljesítménybeli előnyeit, miközben teljes SQL-funkciókat tesz lehetővé.

Jótanács

Az al lekérdezési minta minden olyan műveletnél működik, amely nem kombinálható közvetlenül a következővel TOP (N) WITH APPROXIMATE: . Vektorkeresés alkalmazása a belső lekérdezésben, majd bármely SQL-művelet használata a külső lekérdezésben.

Gyakori forgatókönyvek

Az alábbi táblázat azokat a műveleteket sorolja fel, amelyekhez a lekérdezési minta szükséges:

Operation Példa használati esetre
CSOPORTOSÍTÁS ALAPJÁN Statisztikák kiszámítása kategóriánként
Összesítő függvények Összesített DARAB, AVG, MIN, MAX az eredmények között
Ablakfunkciók ROW_NUMBER, RANG, DENSE_RANK, NTILE
Műveletek beállítása UNION, UNION ALL, EXCEPT, INTERSECT
Több ORDER BY oszlop Rendezés távolság, majd dátum vagy cím szerint
KÜLÖNBÖZŐ Ismétlődő eredmények eltávolítása
KERESZT ALKALMAZÁSA Vektorkeresés alkalmazása soronként a külső táblázatból

GROUP BY és aggregátum függvények

Az alábbi példában a legjobban megfelelő cikkek átlagos távolsága található kategóriánként. Ebben a példában egy category oszlop lett hozzáadva a táblához a wikipedia_articles cikkek besorolásához.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning' USE MODEL Ada2Embeddings);

SELECT 
    category,
    COUNT(*) AS article_count,
    AVG(distance) AS avg_distance,
    MIN(distance) AS closest_match
FROM (
    SELECT TOP (100) WITH APPROXIMATE
        t.id,
        t.title,
        t.category,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS vector_results
GROUP BY category
ORDER BY avg_distance;

Ablakfunkciók

Az alábbi példa hasonlóság szerint rangsorolja a cikkeket, és kvartiliseket rendel hozzá.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'neural networks' USE MODEL Ada2Embeddings);

SELECT 
    id,
    title,
    category,
    distance,
    ROW_NUMBER() OVER (ORDER BY distance) AS rank,
    NTILE(4) OVER (ORDER BY distance) AS quartile
FROM (
    SELECT TOP (100) WITH APPROXIMATE
        t.id,
        t.title,
        t.category,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS vector_results
WHERE distance < 0.5
ORDER BY rank;

Műveletek beállítása (UNION, INTERSECT, EXCEPT)

Az alábbi példa két különböző keresési lekérdezés eredményeit egyesíti az UNION használatával.

DECLARE @qv1 VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence' USE MODEL Ada2Embeddings);
DECLARE @qv2 VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning' USE MODEL Ada2Embeddings);

SELECT id, title, 'AI Search' AS source
FROM (
    SELECT TOP (50) WITH APPROXIMATE
        t.id,
        t.title,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv1,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS ai_results

UNION

SELECT id, title, 'ML Search' AS source
FROM (
    SELECT TOP (50) WITH APPROXIMATE
        t.id,
        t.title,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv2,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS ml_results
ORDER BY id;

KÜLÖNBÖZŐ

Az alábbi példa különböző kategóriákat kap a legjobban megfelelő cikkektől.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'deep learning' USE MODEL Ada2Embeddings);

SELECT DISTINCT category
FROM (
    SELECT TOP (100) WITH APPROXIMATE
        t.id,
        t.category,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS vector_results
WHERE distance < 0.7
ORDER BY category;

Több ORDER BY oszlop

Az alábbi példa a távolság, majd a címek alapján rendezi a kötelékeket.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'quantum computing' USE MODEL Ada2Embeddings);

SELECT 
    id,
    title,
    category,
    distance
FROM (
    SELECT TOP (100) WITH APPROXIMATE
        t.id,
        t.title,
        t.category,
        r.distance
    FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles AS t,
        COLUMN = title_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
    ORDER BY r.distance
) AS vector_results
ORDER BY distance, title;

KERESZT ALKALMAZÁSA

A használat SELECT TOP (N) WITH APPROXIMATEVECTOR_SEARCHsorán nem használhatja CROSS APPLY vagy OUTER APPLY használhatja ugyanabban FROM a záradékban. Ez akkor is érvényes, ha nincs külső hivatkozás a függvényen VECTOR_SEARCH belül.

Egy lekérdezés logikailag CROSS APPLY több vektorkeresést hajt végre (a külső táblázatból soronként egyet), és az összes találatot egyetlen rendezett adatfolyamba egyesítené. A közelítő legközelebbi szomszéd algoritmus nem tudja hatékonyan egyesíteni a több független vektorkeresés eredményeit, miközben fenntartja a hozzávetőleges garanciákat és a teljesítményjellemzőket.

Hibát okozó minta:

-- This query is NOT supported
SELECT TOP (100) WITH APPROXIMATE
    o.id,
    vs.title,
    vs.distance
FROM Orders AS o
    CROSS APPLY VECTOR_SEARCH(
        TABLE = Products,
        COLUMN = embedding,
        SIMILAR_TO = o.customer_preference_vector,
        METRIC = 'cosine'
    ) AS vs
WHERE o.order_date > '2026-01-01'
ORDER BY vs.distance;

Ez a minta hasonló termékeket próbál megkeresni az egyes rendelések ügyfélbeállításaihoz, de közelítő vektorkeresési tervvel nem hajtható végre.

Ajánlott minta:

Hasonló eredmények eléréséhez használjon egy alqueryt TOP (N) WITH APPROXIMATECROSS APPLY önmagában:

-- This query IS supported
SELECT
    o.id,
    vs.title,
    vs.distance
FROM Orders AS o
    CROSS APPLY (
        SELECT TOP (10) WITH APPROXIMATE
            p.title,
            r.distance
        FROM VECTOR_SEARCH(
            TABLE = Products AS p,
            COLUMN = embedding,
            SIMILAR_TO = o.customer_preference_vector,
            METRIC = 'cosine'
        ) AS r
        ORDER BY r.distance
    ) AS vs
WHERE o.order_date > '2026-01-01';

Ebben a mintában:

  • Minden vektorkeresés a 10 legjobb találatra korlátozódik az al lekérdezésben
  • A külső lekérdezés nem használható WITH APPROXIMATE
  • Az eredmények soronként megfelelő hatókörrel vannak elosztva a külső táblázatból

Közvetlenül működő műveletek

A következő műveletek közvetlenül VECTOR_SEARCH , al lekérdezés nélkül használhatók: