Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Applies to: SQL Server 2025 (17.x) Preview
Используется VECTOR_SEARCH
для поиска векторов, аналогичных заданным векторам запроса, с помощью приблизительного алгоритма поиска векторов ближайших соседей. Дополнительные сведения о том, как работает индексирование векторов и поиск векторов, а также различия между точным и приблизительным поиском, см. в статье "Обзор векторного поиска и векторных индексов в ядро СУБД SQL".
Preview feature
Note
Эта функция находится в предварительной версии и подлежит изменению. Не забудьте прочитать условия использования предварительной версии в соглашениях об уровне обслуживания (SLA) для веб-служб.
Эта функция предоставляется в виде предварительной версии. In order to use this feature, you must enable the following trace flags:
DBCC TRACEON(466, 474, 13981, -1)
Make sure to check out the current limitations before using it.
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]
Таблица, в которой выполняется поиск. Она должна быть базовой таблицей. Представления, временные таблицы, как локальные, так и глобальные, не поддерживаются.
COLUMN = vector_column
Векторный столбец, в котором выполняется поиск. The column must be a vector data type.
SIMILAR_TO = query_vector
Вектор, используемый для поиска. It must be a variable or a column of vector type.
METRIC = { 'cosine' | "dot" | 'euclidean' }
Метрика расстояния, используемая для вычисления расстояния между вектором запроса и векторами в указанном столбце. Индекс ANN (Приблизительный ближайший сосед) используется только в том случае, если найден соответствующий индекс ANN с той же метрикой и на том же столбце. Если нет совместимых индексов ANN, возникает предупреждение и используется алгоритм KNN (k-Ближайший сосед).
TOP_N = <k>
Максимальное количество аналогичных векторов, которые должны быть возвращены. It must be a positive integer.
result_table_alias
Псевдоним используется для ссылки на результирующий набор.
Возврат результирующий набор
Возвращаемый результирующий набор содержит все столбцы из таблицы, указанной в аргументе TABLE, а также дополнительный distance
столбец. Столбец distance
содержит расстояние между заданным вектором в аргументе COLUMN и вектором, указанным в аргументе SIMILAR_TO.
Limitations
Текущая предварительная версия имеет следующие ограничения:
Post-filtering only
Поиск вектора происходит перед применением любого предиката. Дополнительные предикаты применяются только после возврата наиболее похожих векторов. В следующем примере возвращаются первые 10 строк с внедрением, наиболее похожими на вектор @qv
запроса, а затем применяет предикат, указанный в предложении WHERE
. Если ни одна из 10 строк, связанных с векторами, возвращаемыми векторным поиском, не имеет accepted
значения 1, результат пуст.
SELECT
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
Example 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
t.id, s.distance, t.title
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
Example 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')
) S(id, q)
;
SELECT
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
Example 3
Базовый комплексный пример использования CREATE VECTOR INDEX
и связанной VECTOR_SEARCH
функции. Внедренные макеты издеваются. In a real world scenario, embeddings are generated using an embedding model and AI_GENERATE_EMBEDDINGS, or an external library such as OpenAI SDK.
Следующий блок кода демонстрирует функцию VECTOR_SEARCH
с макетами внедрения:
- Включает флаг трассировки, необходимый в текущей предварительной версии.
- Create a sample table
dbo.Articles
with a columnembedding
with data type vector(5). - Вставка примеров данных с макетом внедренных данных.
- Создайте векторный индекс в
dbo.Articles.embedding
. - Продемонстрировать поиск сходства векторов с функцией
VECTOR_SEARCH
.
-- Step 0: Enable Preview Feature
DBCC TRACEON(466, 474, 13981, -1);
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
);
-- 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]');
-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (metric = 'cosine', type = 'diskann');
-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
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;