Compartilhar via


VECTOR_SEARCH (Transact-SQL) (versão prévia)

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database SQLdatabase in Microsoft Fabric

Pesquise vetores semelhantes a determinados vetores de consulta usando um algoritmo de pesquisa de vetor próximo aproximado. Para saber mais sobre como funciona a indexação de vetores e a pesquisa de vetor e as diferenças entre a pesquisa exata e aproximada, consulte a pesquisa vetor e índices de vetor no Mecanismo de Banco de Dados SQL.

Banco de Dados SQL do Azure e banco de dados SQL no Fabric

O recurso está em prévia. Verifique as limitações atuais antes de usá-la.

Observação

Como uma versão prévia do recurso, a tecnologia apresentada neste artigo está sujeita aos Termos de uso complementares para versões prévias do Microsoft Azure.

Recurso de Prévia do SQL Server 2025

No SQL Server 2025, essa função está em prévia e está sujeita a alterações. Para usar esse recurso, você deve habilitar a PREVIEW_FEATURES do banco de dados.

Verifique as limitações atuais antes de usá-la.

Syntax

Convenções de sintaxe de 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 = objeto [AS source_table_alias]

Tabela na qual executar a pesquisa. Deve ser uma tabela base. Não há suporte para exibições, tabelas temporárias, locais e globais.

COLUNA = vector_column

A coluna de vetor na qual a pesquisa é executada. A coluna deve ser um tipo de dados de vetor .

SIMILAR_TO = query_vector

O vetor usado para pesquisa. Deve ser uma variável ou uma coluna de tipo de vetor .

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

A métrica de distância usada para calcular a distância entre o vetor de consulta e os vetores na coluna especificada. Um índice ANN (Vizinho Mais Próximo Aproximado) é usado somente se um índice ANN correspondente, com a mesma métrica e na mesma coluna, for encontrado. Se não houver índices ANN compatíveis, um aviso será gerado e o algoritmo KNN (k-Nearest Neighbor) será usado.

TOP_N = <k>

O número máximo de vetores semelhantes que devem ser retornados. Deve ser um inteiro positivo.

result_table_alias

O alias é usado para fazer referência ao conjunto de resultados.

Conjunto de resultados de retorno

O conjunto de resultados retornado pela VECTOR_SEARCH função inclui:

  • Todas as colunas da tabela especificadas no TABLE argumento.

  • Uma coluna adicional chamada distance, que representa a distância entre o vetor na coluna especificada pelo COLUMN argumento e o vetor fornecido no SIMILAR_TO argumento.

A coluna de distância é gerada pela VECTOR_SEARCH função em si, enquanto todas as outras colunas vêm da tabela referenciada no TABLE argumento.

Se você usar um alias para a tabela no TABLE argumento, deverá usar esse mesmo alias para referenciar suas colunas na SELECT instrução. Você não pode usar o alias atribuído a VECTOR_SEARCH colunas de referência da tabela especificada em TABLE. Esse comportamento é mais fácil de entender se você pensar no conjunto de resultados criado usando a saída VECTOR_SEARCH e mesclando-a com os dados da tabela.

Se a tabela especificada no TABLE argumento já contiver uma coluna nomeada distance, o comportamento será semelhante a uma junção SQL entre duas tabelas que compartilham um nome de coluna. Nesses casos, você deve usar aliases de tabela para desambiguar as referências de coluna; caso contrário, um erro será gerado.

Limitations

A versão prévia atual tem as seguintes limitações:

Somente pós-filtro

A pesquisa de vetor ocorre antes de aplicar qualquer predicado. Predicados adicionais são aplicados somente depois que os vetores mais semelhantes são retornados. O exemplo a seguir retorna as 10 principais linhas com inserções mais semelhantes ao vetor @qvde consulta e aplica o predicado especificado na WHERE cláusula. Se nenhuma das 10 linhas associadas aos vetores retornados pela pesquisa de vetor tiver a accepted coluna igual a 1, o resultado estará vazio.

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 não pode ser usado em exibições

VECTOR_SEARCH não pode ser usado no corpo de uma exibição.

Examples

Exemplo 1

O exemplo a Pink Floyd music style seguir localiza os 10 artigos mais semelhantes à wikipedia_articles_embeddings tabela.

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

Exemplo 2

O mesmo que o exemplo 1, mas desta vez os vetores de consulta estão tirando de outra tabela em vez de uma variável.

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;

Exemplo 3

Um exemplo básico de ponta a ponta usando CREATE VECTOR INDEX e a função relacionada VECTOR_SEARCH . As inserções são simuladas. Em um cenário do mundo real, as inserções são geradas usando um modelo de inserção e AI_GENERATE_EMBEDDINGS ou uma biblioteca externa, como o SDK do OpenAI.

O bloco de código a seguir demonstra a VECTOR_SEARCH função com inserções simuladas:

  1. Habilita o sinalizador de rastreamento, necessário na versão prévia atual.
  2. Crie uma tabela dbo.Articles de exemplo com uma coluna embedding com vetor de tipo de dados (5).
  3. Insira dados de exemplo com dados de inserção fictícios.
  4. Criar um índice de vetor em dbo.Articles.embedding.
  5. Demonstre a pesquisa de similaridade de vetor com a VECTOR_SEARCH função.
-- 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;