다음을 통해 공유


VECTOR_SEARCH(Transact-SQL) (미리 보기)

SQL Server 2025(17.x) 미리 보기

근사한 인접 벡터 검색 알고리즘을 사용하여 지정된 쿼리 벡터와 유사한 벡터를 검색합니다. 벡터 인덱싱 및 벡터 검색의 작동 방식과 정확한 검색과 근사 검색 간의 차이점에 대한 자세한 내용은 SQL Database 엔진의 벡터를 참조하세요.

미리 보기 기능

비고

이 함수는 미리 보기 상태이며 변경될 수 있습니다. 온라인 서비스에 대한 SLA(서비스 수준 계약)에서 미리 보기 사용 약관을 읽어야 합니다.

이 기능은 미리 보기로 제공됩니다. 이 기능을 사용하려면 다음 추적 플래그를 사용하도록 설정해야 합니다.

DBCC TRACEON(466, 474, 13981, -1)

사용하기 전에 현재 제한 사항을 확인해야 합니다.

문법

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]

주장들

TABLE = 개체 [AS source_table_alias]

검색을 수행하는 테이블입니다. 기본 테이블이어야 합니다. 로컬 및 전역 뷰, 임시 테이블은 지원되지 않습니다.

COLUMN = vector_column

검색이 수행되는 벡터 열입니다. 열은 벡터 데이터 형식이어야 합니다.

SIMILAR_TO = query_vector

검색에 사용되는 벡터입니다. 변수 또는 벡터 형식의 열이어야 합니다.

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

쿼리 벡터와 지정된 열의 벡터 사이의 거리를 계산하는 데 사용되는 거리 메트릭입니다. ANN(근사 근사 항목) 인덱스는 동일한 메트릭과 동일한 열에 일치하는 ANN 인덱스가 있는 경우에만 사용됩니다. 호환되는 ANN 인덱스가 없으면 경고가 발생하고 KNN(k-Nearest Neighbor) 알고리즘이 사용됩니다.

TOP_N = <k>

반환해야 하는 유사한 벡터의 최대 수입니다. 양의 수여야 합니다.

result_table_alias

별칭은 결과 집합을 참조하는 데 사용됩니다.

결과 집합 반환

반환된 결과 집합에는 TABLE 인수에 지정된 테이블의 모든 열과 추가 distance 열이 있습니다. 열에는 distance COLUMN 인수의 지정된 벡터와 SIMILAR_TO 인수에 지정된 벡터 사이의 거리가 포함됩니다.

제한점

현재 미리 보기에는 다음과 같은 제한 사항이 있습니다.

필터링 후만

조건자를 적용하기 전에 벡터 검색이 발생합니다. 추가 조건자는 가장 유사한 벡터가 반환된 후에만 적용됩니다. 다음 샘플에서는 쿼리 벡터 @qv와 가장 유사한 포함이 있는 상위 10개 행을 반환한 다음 절에 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 뷰 본문에 사용할 수 없습니다.

예시

예제 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

예제 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

예제 3

기본 엔드 투 엔드 예제 사용 CREATE VECTOR INDEX 및 관련 VECTOR_SEARCH 함수입니다. 포함은 조롱됩니다. 실제 시나리오에서는 포함 모델 및 AI_GENERATE_EMBEDDINGS 사용하거나 OpenAI SDK와 같은 외부 라이브러리를 사용하여 포함이 생성됩니다.

다음 코드 블록은 모의 포함 기능이 VECTOR_SEARCH 있는 함수를 보여 줍니다.

  1. 현재 미리 보기에 필요한 추적 플래그를 사용하도록 설정합니다.
  2. 데이터 형식 dbo.Articles가 있는 열 embedding 이 있는 샘플 테이블을 만듭니다.
  3. 모의 포함 데이터를 사용하여 샘플 데이터를 삽입합니다.
  4. 에서 벡터 인덱스 dbo.Articles.embedding만들기
  5. 함수를 사용하여 벡터 유사성 검색을 보여 줍니다 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;