Partilhar via


VETOR_SEARCH (Transact-SQL) (Pré-visualização)

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

Procure vetores semelhantes a um determinado vetor de consulta usando um algoritmo de pesquisa vetorial de vizinhos mais próximos aproximados. Para saber mais sobre como a indexação vetorial e a pesquisa vetorial funcionam, e as diferenças entre a pesquisa exata e aproximada, consulte Pesquisa vetorial e índices vetoriais no Mecanismo de Banco de dados SQL.

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

A funcionalidade está em pré-visualização. Certifique-se de verificar as limitações atuais antes de usá-lo.

Observação

Como funcionalidade de pré-visualização, a tecnologia apresentada neste artigo está sujeita aos Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.

Funcionalidade de Pré-visualização do SQL Server 2025

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

Certifique-se de verificar as limitações atuais antes de usá-lo.

Syntax

Transact-SQL convenções de sintaxe

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

TABELA = objeto [AS source_table_alias]

Tabela em que se realiza a pesquisa. Deve ser uma tabela de base. Não há suporte para visualizações, tabelas temporárias, locais e globais.

COLUNA = vetor_column

A coluna vetorial na qual a pesquisa é realizada. A coluna deve ser um tipo de dados vetoriais .

SIMILAR_TO = query_vetor

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

MÉTRICA = { 'cosseno' | 'ponto' | 'euclidiano' }

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 (Approximate Nearest Neighbor) é 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 número 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 especificada 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 própria função, enquanto todas as outras colunas vêm da tabela referenciada TABLE no argumento.

Se você usar um alias para a tabela no TABLE argumento, deverá usar esse mesmo alias para fazer referência a SELECT suas colunas na instrução. Não é possível usar o alias atribuído às 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 pegando a saída e mesclando-a com os dados da VECTOR_SEARCH tabela.

Se a tabela especificada no TABLE argumento já contiver uma coluna chamada 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 visualização atual tem as seguintes limitações:

Apenas pós-filtro

A pesquisa vetorial acontece antes da aplicação de 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 incorporações mais semelhantes ao vetor @qvde consulta e, em seguida, aplica o predicado especificado na WHERE cláusula. Se nenhuma das 10 linhas associadas aos vetores retornados pela pesquisa vetorial 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;

VETOR_SEARCH não pode ser usado em modos de exibição

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

Examples

Exemplo 1

O exemplo a seguir localiza os 10 artigos mais semelhantes ao Pink Floyd music style na 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 tomando 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 CREATE VECTOR INDEX básico de uso de ponta a ponta e a função relacionada VECTOR_SEARCH . As incorporações são ridicularizadas. Em um cenário do mundo real, as incorporações são geradas usando um modelo e AI_GENERATE_EMBEDDINGS de incorporação ou uma biblioteca externa, como o OpenAI SDK.

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

  1. Habilita o sinalizador de rastreamento, necessário na visualização atual.
  2. Crie uma tabela dbo.Articles de exemplo com uma coluna embedding com o tipo de dados vetor(5).
  3. Insira dados de exemplo com dados de incorporação simulados.
  4. Crie um índice vetorial no dbo.Articles.embedding.
  5. Demonstrar a pesquisa de semelhança vetorial 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;