Partager via


VECTOR_SEARCH (Transact-SQL) (préversion)

S’applique à : SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Recherchez des vecteurs similaires à des vecteurs de requête donnés à l’aide d’un algorithme de recherche de vecteurs voisin le plus proche. Pour en savoir plus sur le fonctionnement de l’indexation vectorielle et de la recherche vectorielle et les différences entre la recherche exacte et approximative, reportez-vous à la recherche vectorielle et aux index vectoriels dans le moteur de base de données SQL.

Base de données Azure SQL et base de données SQL dans Fabric

La fonctionnalité est en aperçu. Veillez à consulter les limitations actuelles avant de l’utiliser.

Note

En tant que fonctionnalité en préversion, la technologie présentée dans cet article est soumise aux conditions d’utilisation supplémentaires des préversions de Microsoft Azure.

Fonctionnalité d’aperçu de SQL Server 2025

Dans SQL Server 2025, cette fonction est en aperçu et peut être modifiée. Pour utiliser cette fonctionnalité, vous devez activer la PREVIEW_FEATURES la base de données.

Veillez à consulter les limitations actuelles avant de l’utiliser.

Syntax

Conventions de la syntaxe Transact-SQL

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

Table sur laquelle effectuer la recherche. Il doit s’agir d’une table de base. Les vues, les tables temporaires, locales et globales, ne sont pas prises en charge.

COLONNE = vector_column

Colonne vectorielle dans laquelle la recherche est effectuée. La colonne doit être un type de données vectorielle .

SIMILAR_TO = query_vector

Vecteur utilisé pour la recherche. Il doit s’agir d’une variable ou d’une colonne de type vectoriel .

METRIC = { 'cosin' | 'dot' | 'euclidean' }

Métrique de distance utilisée pour calculer la distance entre le vecteur de requête et les vecteurs de la colonne spécifiée. Un index ANN (Voisin le plus proche approximatif) est utilisé uniquement si un index ANN correspondant, avec la même métrique et sur la même colonne, est trouvé. S’il n’existe aucun index ANN compatible, un avertissement est déclenché et l’algorithme KNN (k-Nearest Neighbor) est utilisé.

TOP_N = <k>

Nombre maximal de vecteurs similaires qui doivent être retournés. Il doit s’agir d’un entier positif.

result_table_alias

L’alias est utilisé pour référencer le jeu de résultats.

Retourner le jeu de résultats

Le jeu de résultats retourné par la VECTOR_SEARCH fonction inclut :

  • Toutes les colonnes de la table spécifiées dans l’argument TABLE .

  • Colonne supplémentaire nommée distance, qui représente la distance entre le vecteur dans la colonne spécifiée par l’argument COLUMN et le vecteur fourni dans l’argument SIMILAR_TO .

La colonne de distance est générée par la VECTOR_SEARCH fonction elle-même, tandis que toutes les autres colonnes proviennent de la table référencée dans l’argument TABLE .

Si vous utilisez un alias pour la table dans l’argument TABLE , vous devez utiliser ce même alias pour référencer ses colonnes dans l’instruction SELECT . Vous ne pouvez pas utiliser l’alias affecté pour référencer VECTOR_SEARCH des colonnes à partir de la table spécifiée dans TABLE. Ce comportement est plus facile à comprendre si vous pensez au jeu de résultats généré en prenant la sortie et en la fusionnant avec les données de VECTOR_SEARCH table.

Si la table spécifiée dans l’argument TABLE contient déjà une colonne nommée distance, le comportement sera similaire à une jointure SQL entre deux tables qui partagent un nom de colonne. Dans ce cas, vous devez utiliser des alias de table pour lever l’ambiguïté des références de colonne ; sinon, une erreur est générée.

Limitations

La préversion actuelle présente les limitations suivantes :

Post-filtre uniquement

La recherche vectorielle se produit avant d’appliquer un prédicat. Les prédicats supplémentaires sont appliqués uniquement après le retour des vecteurs les plus similaires. L’exemple suivant retourne les 10 premières lignes avec des incorporations les plus similaires au vecteur @qvde requête, puis applique le prédicat spécifié dans la WHERE clause. Si aucune des 10 lignes associées aux vecteurs retournés par la recherche vectorielle n’a la accepted colonne égale à 1, le résultat est vide.

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 ne peuvent pas être utilisés dans les vues

VECTOR_SEARCH ne peut pas être utilisé dans le corps d’une vue.

Examples

Exemple 1

L’exemple suivant recherche les 10 articles les plus similaires au Pink Floyd music stylewikipedia_articles_embeddings tableau.

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

Exemple 2

Identique à l’exemple 1, mais cette fois, les vecteurs de requête proviennent d’une autre table au lieu d’une variable.

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;

Exemple 3

Exemple de base de bout en bout utilisant CREATE VECTOR INDEX et de la fonction associée VECTOR_SEARCH . Les incorporations sont simulées. Dans un scénario réel, les incorporations sont générées à l’aide d’un modèle d’incorporation et de AI_GENERATE_EMBEDDINGS, ou d’une bibliothèque externe telle qu’OpenAI SDK.

Le bloc de code suivant illustre la VECTOR_SEARCH fonction avec des incorporations fictifs :

  1. Active l’indicateur de trace, nécessaire dans la préversion actuelle.
  2. Créez un exemple de table dbo.Articles avec une colonne embedding avec un vecteur de type de données (5).
  3. Insérez des exemples de données avec des données d’incorporation simulées.
  4. Créez un index vectoriel sur dbo.Articles.embedding.
  5. Illustrez la recherche de similarité vectorielle avec la VECTOR_SEARCH fonction.
-- 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;