次の方法で共有


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

対象者: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

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

Fabric 内の Azure SQL Database と SQL データベース

この機能はまだプレビュー段階です。 使用する前に、 現在の制限事項を 確認してください。

この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。

SQL Server 2025 プレビュー機能

SQL Server 2025ではこの機能はプレビュー段階で変更される可能性があります。 この機能を使用するには、PREVIEW_FEATURESdatabase スコープ構成を有効にする必要があります。

使用する前に、 現在の制限事項を 確認してください。

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

TOP_N = <k>

返される必要がある類似ベクトルの最大数。 正の 整数である必要があります。

result_table_alias

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

結果セットを返す

VECTOR_SEARCH関数によって返される結果セットには、次のものが含まれます。

  • TABLE引数で指定されたテーブルのすべての列。

  • distanceという名前の追加の列。COLUMN引数で指定された列内のベクターと、SIMILAR_TO引数に指定されたベクターとの間の距離を表します。

distance 列は VECTOR_SEARCH 関数自体によって生成されますが、他のすべての列は、 TABLE 引数で参照されているテーブルから取得されます。

TABLE引数でテーブルのエイリアスを使用する場合は、同じエイリアスを使用して、SELECT ステートメント内の列を参照する必要があります。 VECTOR_SEARCHに割り当てられたエイリアスを使用して、TABLEで指定されたテーブルの列を参照することはできません。 この動作は、 VECTOR_SEARCH の出力を取得してテーブル データとマージすることによって構築された結果セットを考えると理解しやすくなります。

TABLE引数で指定されたテーブルに既に distance という名前の列が含まれている場合、動作は列名を共有する 2 つのテーブル間の SQL 結合に似ています。 このような場合は、テーブルのエイリアスを使用して列参照を明確にする必要があります。そうしないと、エラーが発生します。

Limitations

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

後フィルターのみ

ベクター検索は、述語を適用する前に行われます。 追加の述語は、最も似たベクトルが返された後にのみ適用されます。 次の例では、クエリ ベクター @qvに最も似た埋め込みがある上位 10 行を返し、 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

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

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を含むサンプル テーブル を作成します。
  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;