Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
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 Ricerca vettoriale e indici vettoriali nel motore di database SQL.
Database SQL di Azure e database SQL in Fabric
La funzione è in anteprima. Assicurarsi di controllare le limitazioni correnti prima di usarlo.
Annotazioni
In quanto funzionalità di anteprima, la tecnologia presentata in questo articolo è soggetta alle condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure.
Funzionalità di anteprima di SQL Server 2025
In SQL Server 2025 questa funzione è in anteprima ed è soggetta a modifiche. Per usare questa funzionalità, è necessario abilitare la PREVIEW_FEATURESconfigurazione con ambito database.
Assicurarsi di controllare le limitazioni correnti prima di usarlo.
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.
COLONNA = vector_column
Colonna vettoriale in cui viene eseguita la ricerca. La colonna deve essere un tipo di dati vector .
SIMILAR_TO = query_vector
Vettore utilizzato per la ricerca. Deve essere una variabile o una colonna di tipo vettore .
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. Deve essere un numero intero positivo.
result_table_alias
L'alias viene usato per fare riferimento al set di risultati.
Restituire il set di risultati
Il set di risultati restituito dalla VECTOR_SEARCH funzione include:
Tutte le colonne della tabella specificata nell'argomento
TABLE.Colonna aggiuntiva denominata
distance, che rappresenta la distanza tra il vettore nella colonna specificata dall'argomentoCOLUMNe il vettore fornito nell'argomentoSIMILAR_TO.
La colonna distance viene generata dalla VECTOR_SEARCH funzione stessa, mentre tutte le altre colonne provengono dalla tabella a cui viene fatto riferimento nell'argomento TABLE .
Se si usa un alias per la tabella nell'argomento TABLE , è necessario utilizzare lo stesso alias per fare riferimento alle colonne nell'istruzione SELECT . Non è possibile usare l'alias assegnato a per fare riferimento alle VECTOR_SEARCH colonne della tabella specificata in TABLE. Questo comportamento è più semplice da comprendere se si pensa al set di risultati compilato prendendo l'output di VECTOR_SEARCH e unendolo ai dati della tabella.
Se la tabella specificata nell'argomento TABLE contiene già una colonna denominata distance, il comportamento sarà simile a un join SQL tra due tabelle che condividono un nome di colonna. In questi casi, è necessario usare alias di tabella per evitare ambiguità con i riferimenti alle colonne. In caso contrario, verrà generato un errore.
Limitations
L'anteprima corrente presenta le limitazioni seguenti:
Solo dopo filtro
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 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 non può essere usato nelle visualizzazioni
VECTOR_SEARCH non può essere usato nel corpo di una visualizzazione.
Examples
Esempio 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 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
Esempio 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')
) 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;
Esempio 3
Esempio end-to-end di base che usa CREATE VECTOR INDEX e la funzione correlata VECTOR_SEARCH . Gli incorporamenti vengono fittizi. In uno scenario reale, gli incorporamenti vengono generati usando un modello di incorporamento e AI_GENERATE_EMBEDDINGS o una libreria esterna come OpenAI SDK.
Il blocco di codice seguente illustra la VECTOR_SEARCH funzione con incorporamenti fittizi:
- Abilita il flag di traccia, necessario nell'anteprima corrente.
- Creare una tabella di esempio con una colonna con tipo di dati vector(5).Create a sample table
dbo.Articleswith a columnembeddingwith data type vector(5). - Inserire dati di esempio con dati fittizi di incorporamento.
- Creare un indice vettoriale in
dbo.Articles.embedding. - Illustrare la ricerca di somiglianza del vettore con la
VECTOR_SEARCHfunzione .
-- 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;