次の方法で共有


VECTOR_SEARCH (Transact-SQL) (プレビュー)

Applies to: SQL Server 2025 (17.x) Preview

VECTOR_SEARCHを使用して、近似最近傍ベクトル検索アルゴリズムを使用して、特定のクエリ ベクターと同様のベクトルを検索します。 ベクター インデックス作成とベクター検索のしくみ、および正確な検索と近似検索の違いの詳細については、 SQL Database エンジンでのベクター検索とベクター インデックスの概要を参照してください。

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-Nearest Neighbor) アルゴリズムが使用されます。

TOP_N = <k>

返される必要がある類似ベクトルの最大数。 It must be a positive integer.

result_table_alias

エイリアスは、結果セットを参照するために使用されます。

結果セットを返す

返される結果セットには、TABLE 引数で指定されたテーブルのすべての列と、追加の distance 列が含まれます。 distance列には、COLUMN 引数内の指定されたベクトルと、引数で指定されたベクトルSIMILAR_TO間の距離が含まれます。

Limitations

現在のプレビューには、次の制限があります。

Post-filtering only

ベクター検索は、述語を適用する前に行われます。 追加の述語は、最も似たベクトルが返された後にのみ適用されます。 次の例では、クエリ ベクター @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 ビューの本文では使用できません。

Examples

Example 1

次の例では、Pink Floyd music style テーブルのwikipedia_articles_embeddingsに最も似た 10 個の記事を検索します。

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 関数を示しています。

  1. 現在のプレビューで必要なトレース フラグを有効にします。
  2. Create a sample table dbo.Articles with a column embedding with data type vector(5).
  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;