Compartir por


VECTOR_SEARCH (Transact-SQL) (versión preliminar)

Aplica a: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Busque vectores similares a los vectores de consulta dados mediante un algoritmo de búsqueda de vectores de vecinos más cercano aproximado. Para obtener más información sobre cómo funciona la indexación de vectores y la búsqueda de vectores, y las diferencias entre la búsqueda exacta y aproximada, consulte Búsqueda de vectores e índices de vectores en el motor de base de datos SQL.

Azure SQL Database y SQL Database en Fabric

La función está en vista previa. Asegúrese de consultar las limitaciones actuales antes de usarlas.

Nota:

Como característica en versión preliminar, la tecnología que se presenta en este artículo está sujeta a los términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Función de Vista previa de SQL Server 2025

En SQL Server 2025 esta función está en vista previa y está sujeta a cambios. Para poder usar esta característica, debe habilitar la PREVIEW_FEATURESconfiguración con ámbito de base de datos.

Asegúrese de consultar las limitaciones actuales antes de usarlas.

Syntax

Convenciones de sintaxis 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]

Tabla en la que se realiza la búsqueda. Debe ser una tabla base. No se admiten vistas, tablas temporales, tanto locales como globales.

COLUMNA = vector_column

Columna vectorial en la que se realiza la búsqueda. La columna debe ser un tipo de datos vectorial .

SIMILAR_TO = query_vector

Vector usado para la búsqueda. Debe ser una variable o una columna de tipo vector .

MÉTRICA = { 'coseno' | 'dot' | 'euclidean' }

Métrica de distancia utilizada para calcular la distancia entre el vector de consulta y los vectores de la columna especificada. Solo se usa un índice ANN (vecino más cercano aproximado) si se encuentra un índice ANN coincidente, con la misma métrica y en la misma columna. Si no hay índices ANN compatibles, se genera una advertencia y se usa el algoritmo KNN (vecino más cercano).

TOP_N = <k>

Número máximo de vectores similares que se deben devolver. Debe ser un entero positivo.

result_table_alias

El alias se usa para hacer referencia al conjunto de resultados.

Devolver conjunto de resultados

El conjunto de resultados devuelto por la VECTOR_SEARCH función incluye:

  • Todas las columnas de la tabla especificada en el TABLE argumento .

  • Columna adicional denominada distance, que representa la distancia entre el vector de la columna especificada por el COLUMN argumento y el vector proporcionado en el SIMILAR_TO argumento .

La propia función genera la VECTOR_SEARCH columna distance, mientras que todas las demás columnas proceden de la tabla a la que se hace referencia en el TABLE argumento .

Si usa un alias para la tabla en el TABLE argumento , debe usar ese mismo alias para hacer referencia a sus columnas en la SELECT instrucción . No se puede usar el alias asignado a para hacer referencia a VECTOR_SEARCH columnas de la tabla especificada en TABLE. Este comportamiento es más fácil de entender si piensa en el conjunto de resultados creado tomando el resultado de y combinándolo con los datos de VECTOR_SEARCH la tabla.

Si la tabla especificada en el TABLE argumento ya contiene una columna denominada distance, el comportamiento será similar a una combinación SQL entre dos tablas que comparten un nombre de columna. En tales casos, debe usar alias de tabla para desambiguar las referencias de columna; de lo contrario, se generará un error.

Limitations

La versión preliminar actual tiene las siguientes limitaciones:

Solo filtro posterior

La búsqueda de vectores se produce antes de aplicar cualquier predicado. Los predicados adicionales solo se aplican después de que se devuelvan los vectores más similares. En el ejemplo siguiente se devuelven las 10 primeras filas con incrustaciones más similares al vector @qvde consulta y, a continuación, se aplica el predicado especificado en la WHERE cláusula . Si ninguna de las 10 filas asociadas a los vectores devueltos por la búsqueda de vectores tiene la accepted columna igual a 1, el resultado está vacío.

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 no se pueden usar en vistas

VECTOR_SEARCH no se puede usar en el cuerpo de una vista.

Examples

Ejemplo 1

En el ejemplo siguiente se buscan los 10 artículos más similares a los de Pink Floyd music style la wikipedia_articles_embeddings tabla .

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

Ejemplo 2

Igual que el ejemplo 1, pero esta vez los vectores de consulta toman de otra tabla en lugar de una 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;

Ejemplo 3

Ejemplo básico de un extremo a otro mediante CREATE VECTOR INDEX y la función relacionada VECTOR_SEARCH . Las incrustaciones se simulan. En un escenario real, las incrustaciones se generan mediante un modelo de inserción y AI_GENERATE_EMBEDDINGS, o una biblioteca externa como sdk de OpenAI.

El siguiente bloque de código muestra la VECTOR_SEARCH función con incrustaciones simuladas:

  1. Habilita la marca de seguimiento, necesaria en la versión preliminar actual.
  2. Cree una tabla dbo.Articles de ejemplo con una columna embedding con vector de tipo de datos(5).
  3. Inserte datos de ejemplo con datos ficticios de inserción.
  4. Cree un índice de vector en dbo.Articles.embedding.
  5. Muestra la búsqueda de similitud vectorial con la VECTOR_SEARCH función .
-- 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;