Condividi tramite


VECTOR_SEARCH (Transact-SQL) (anteprima)

Applies to: SQL Server 2025 (17.x) Preview

Usare VECTOR_SEARCH per cercare vettori simili a uno specifico vettore di query usando un algoritmo di ricerca di vettori vicini più vicino approssimativo. Per altre informazioni sul funzionamento dell'indicizzazione vettoriale e della ricerca vettoriale e sulle differenze tra ricerca esatta e approssimativa, vedere Panoramica delle ricerche vettoriali e degli indici vettoriali nel motore di database SQL.

Preview feature

Note

Questa funzione è in anteprima ed è soggetta a modifiche. Assicurarsi di leggere le condizioni di utilizzo dell'anteprima nei contratti di servizio (SLA) per i servizi online.

Questa funzionalità è in anteprima. In order to use this feature, you must enable the following trace flags:

DBCC TRACEON(466, 474, 13981, -1)

Make sure to check out the current limitations before using it.

Syntax

Convenzioni relative alla sintassi 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 = oggetto [AS source_table_alias]

Tabella in cui eseguire la ricerca. Deve essere una tabella di base. Le viste, le tabelle temporanee, sia locali che globali, non sono supportate.

COLUMN = vector_column

Colonna vettoriale in cui viene eseguita la ricerca. The column must be a vector data type.

SIMILAR_TO = query_vector

Vettore utilizzato per la ricerca. It must be a variable or a column of vector type.

METRIC = { 'coseno' | 'dot' | 'euclideo' }

Metrica della distanza usata per calcolare la distanza tra il vettore di query e i vettori nella colonna specificata. Viene usato un indice ANN (Nearest Neighbor approssimativo) solo se viene trovato un indice ANN corrispondente, con la stessa metrica e nella stessa colonna. Se non sono presenti indici ANN compatibili, viene generato un avviso e viene usato l'algoritmo KNN (k-Nearest Neighbor).

TOP_N = <k>

Numero massimo di vettori simili che devono essere restituiti. It must be a positive integer.

result_table_alias

L'alias viene usato per fare riferimento al set di risultati.

Restituire il set di risultati

Il set di risultati restituito include tutte le colonne della tabella specificata nell'argomento TABLE, oltre alla colonna aggiuntiva distance . La distance colonna contiene la distanza tra il vettore specificato nell'argomento COLUMN e il vettore specificato in SIMILAR_TO argomento.

Limitations

L'anteprima corrente presenta le limitazioni seguenti:

Post-filtering only

La ricerca vettoriale viene eseguita prima di applicare qualsiasi predicato. I predicati aggiuntivi vengono applicati solo dopo la restituzione dei vettori più simili. L'esempio seguente restituisce le prime 10 righe con incorporamenti più simili al vettore @qvdi query , quindi applica il predicato specificato nella WHERE clausola . Se nessuna delle 10 righe associate ai vettori restituiti dalla ricerca vettoriale ha la accepted colonna uguale a 1, il risultato è vuoto.

SELECT
  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 non può essere usato nelle visualizzazioni

VECTOR_SEARCH non può essere utilizzato nel corpo di una visualizzazione.

Examples

Example 1

Nell'esempio seguente vengono trovati i 10 articoli più simili a Pink Floyd music style nella wikipedia_articles_embeddings tabella .

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT 
    t.id, s.distance, t.title
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

Example 2

Uguale all'esempio 1, ma questa volta i vettori di query prendono da un'altra tabella anziché da una variabile.

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')
    ) S(id, q)
;

SELECT 
    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

Example 3

Esempio end-to-end di base che usa CREATE VECTOR INDEX e la funzione correlata VECTOR_SEARCH . Gli incorporamenti vengono fittizi. In a real world scenario, embeddings are generated using an embedding model and AI_GENERATE_EMBEDDINGS, or an external library such as OpenAI SDK.

Il blocco di codice seguente illustra la VECTOR_SEARCH funzione con incorporamenti fittizi:

  1. Abilita il flag di traccia, necessario nell'anteprima corrente.
  2. Create a sample table dbo.Articles with a column embedding with data type vector(5).
  3. Inserire dati di esempio con dati fittizi di incorporamento.
  4. Creare un indice vettoriale in dbo.Articles.embedding.
  5. Illustrare la ricerca di somiglianza del vettore con la VECTOR_SEARCH funzione .
-- Step 0: Enable Preview Feature
DBCC TRACEON(466, 474, 13981, -1);
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
);

-- 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]');

-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (metric = 'cosine', type = 'diskann');

-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
    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;