Поделиться через


VECTOR_SEARCH (Transact-SQL) (предварительная версия)

Относится к: SQL Server 2025 (17.x) Azure SQL DatabaseSQL Database в Microsoft Fabric

Поиск векторов, аналогичных заданным векторам запроса, с помощью приблизительного алгоритма поиска ближайших соседей. Дополнительные сведения о том, как работает индексирование векторов и поиск векторов, а также различия между точным и приблизительным поиском, см. векторные индексы и векторные индексы в ядре СУБД SQL.

База данных Azure SQL и база данных SQL в платформе Fabric

Эта функция находится в предварительном просмотре. Прежде чем использовать его, обязательно ознакомьтесь с текущими ограничениями .

Замечание

В отношении технологии (как предварительной версии функции), описанной в этой статье, действуют дополнительные условия использования предварительных версий Microsoft Azure.

Функция предварительного просмотра SQL Server 2025

В SQL Server 2025 эта функция находится в предварительном просмотре и может измениться. Чтобы использовать эту функцию, необходимо включить конфигурацию с областью PREVIEW_FEATURESдействия базы данных.

Прежде чем использовать его, обязательно ознакомьтесь с текущими ограничениями .

Syntax

Соглашения о синтаксисе 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 = объект [AS source_table_alias]

Таблица, в которой выполняется поиск. Она должна быть базовой таблицей. Представления, временные таблицы, как локальные, так и глобальные, не поддерживаются.

СТОЛБЕЦ = vector_column

Векторный столбец, в котором выполняется поиск. Столбец должен быть типом векторных данных.

SIMILAR_TO = query_vector

Вектор, используемый для поиска. Это должна быть переменная или столбец типа вектора .

METRIC = { 'cosine' | "dot" | 'euclidean' }

Метрика расстояния, используемая для вычисления расстояния между вектором запроса и векторами в указанном столбце. Индекс ANN (Приблизительный ближайший сосед) используется только в том случае, если найден соответствующий индекс ANN с той же метрикой и на том же столбце. Если нет совместимых индексов ANN, возникает предупреждение и используется алгоритм KNN (k-Ближайший сосед).

TOP_N = <k>

Максимальное количество аналогичных векторов, которые должны быть возвращены. Это должно быть положительное целое число.

result_table_alias

Псевдоним используется для ссылки на результирующий набор.

Возврат результирующий набор

Результирующий набор, возвращаемый функцией VECTOR_SEARCH , включает:

  • Все столбцы из таблицы, указанной в аргументе TABLE .

  • Дополнительный столбец с именем distance, который представляет расстояние между вектором в столбце, указанным COLUMN аргументом, и вектором, предоставленным в аргументе SIMILAR_TO .

Столбец расстояния создается VECTOR_SEARCH самой функцией, а все остальные столбцы приходят из таблицы, на которую ссылается TABLE аргумент.

При использовании псевдонима для таблицы в TABLE аргументе необходимо использовать тот же псевдоним, чтобы ссылаться на его столбцы в инструкции SELECT . Нельзя использовать псевдоним, назначенный VECTOR_SEARCH для ссылки на столбцы из таблицы, указанной в TABLE. Это поведение проще понять, если вы думаете о результирующем наборе, созданном, принимая выходные данные VECTOR_SEARCH и объединяя их с данными таблицы.

Если таблица, указанная в TABLE аргументе, уже содержит столбец с именем distance, поведение будет аналогично соединению SQL между двумя таблицами, которые совместно используют имя столбца. В таких случаях необходимо использовать псевдонимы таблиц для диамбигуации ссылок на столбцы. В противном случае возникает ошибка.

Limitations

Текущая предварительная версия имеет следующие ограничения:

Только после фильтрации

Поиск вектора происходит перед применением любого предиката. Дополнительные предикаты применяются только после возврата наиболее похожих векторов. В следующем примере возвращаются первые 10 строк с внедрением, наиболее похожими на вектор @qvзапроса, а затем применяет предикат, указанный в предложении WHERE . Если ни одна из 10 строк, связанных с векторами, возвращаемыми векторным поиском, не имеет accepted значения 1, результат пуст.

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 нельзя использовать в представлениях

VECTOR_SEARCH Нельзя использовать в тексте представления.

Examples

Пример 1

Следующий пример находит 10 наиболее похожих Pink Floyd music style статей в wikipedia_articles_embeddings таблице.

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

Пример 2

Аналогично примеру 1, но на этот раз векторы запросов принимают из другой таблицы вместо переменной.

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;

Пример 3

Базовый комплексный пример использования CREATE VECTOR INDEX и связанной VECTOR_SEARCH функции. Внедренные макеты издеваются. В реальном мире внедрение создается с помощью модели внедрения и AI_GENERATE_EMBEDDINGS или внешней библиотеки, например OpenAI SDK.

Следующий блок кода демонстрирует функцию VECTOR_SEARCH с макетами внедрения:

  1. Включает флаг трассировки, необходимый в текущей предварительной версии.
  2. Создайте пример таблицы dbo.Articles со столбцом embedding с вектором типа данных(5).
  3. Вставка примеров данных с макетом внедренных данных.
  4. Создайте векторный индекс в dbo.Articles.embedding.
  5. Продемонстрировать поиск сходства векторов с функцией VECTOR_SEARCH .
-- 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;