Bagikan melalui


VECTOR_SEARCH (Transact-SQL) (Pratinjau)

Berlaku untuk: SQL Server 2025 (17.x) Database SQL Azure SQL databasedi Microsoft Fabric

Cari vektor yang mirip dengan vektor kueri tertentu menggunakan perkiraan algoritma pencarian vektor tetangga terdekat. Untuk mempelajari selengkapnya tentang cara kerja pengindeksan vektor dan pencarian vektor, dan perbedaan antara pencarian yang tepat dan perkiraan, lihat Indeks pencarian vektor dan vektor di Mesin Database SQL.

Database Azure SQL dan database SQL di Fabric

Fitur ini dalam pratinjau. Pastikan untuk memeriksa batasan saat ini sebelum menggunakannya.

Nota

Sebagai fitur pratinjau, teknologi yang tersaji dalam artikel ini tunduk pada Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Fitur Pratinjau SQL Server 2025

Di SQL Server 2025, fungsi ini dalam pratinjau dan dapat berubah. Untuk menggunakan fitur ini, Anda harus mengaktifkan PREVIEW_FEATURESkonfigurasi cakupan database.

Pastikan untuk memeriksa batasan saat ini sebelum menggunakannya.

Syntax

Konvensi sintaks 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

TABEL = objek [AS source_table_alias]

Tabel tempat melakukan pencarian. Ini harus tabel dasar. Tampilan, tabel sementara, baik lokal maupun global, tidak didukung.

KOLOM = vector_column

Kolom vektor tempat pencarian dilakukan. Kolom harus berupa jenis data vektor .

SIMILAR_TO = query_vector

Vektor yang digunakan untuk pencarian. Ini harus berupa variabel atau kolom jenis vektor .

METRIK = { 'kosinus' | 'titik' | 'euclidean' }

Metrik jarak yang digunakan untuk menghitung jarak antara vektor kueri dan vektor di kolom yang ditentukan. Indeks ANN (Perkiraan Tetangga Terdekat) digunakan hanya jika indeks ANN yang cocok, dengan metrik yang sama dan pada kolom yang sama, ditemukan. Jika tidak ada indeks ANN yang kompatibel, peringatan akan dinaikkan dan algoritma KNN (k-Nearest Neighbor) digunakan.

TOP_N = <k>

Jumlah maksimum vektor serupa yang harus dikembalikan. Ini harus bilangan bulat positif.

result_table_alias

Alias digunakan untuk mereferensikan kumpulan hasil.

Mengembalikan tataan hasil

Tataan hasil yang VECTOR_SEARCH dikembalikan oleh fungsi meliputi:

  • Semua kolom dari tabel yang ditentukan dalam TABLE argumen.

  • Kolom tambahan bernama distance, yang mewakili jarak antara vektor dalam kolom yang ditentukan oleh COLUMN argumen dan vektor yang disediakan dalam SIMILAR_TO argumen.

Kolom jarak dihasilkan oleh fungsi itu VECTOR_SEARCH sendiri, sementara semua kolom lain berasal dari tabel yang dirujuk dalam TABLE argumen.

Jika Anda menggunakan alias untuk tabel dalam TABLE argumen, Anda harus menggunakan alias yang sama untuk mereferensikan kolomnya dalam SELECT pernyataan. Anda tidak dapat menggunakan alias yang ditetapkan ke untuk VECTOR_SEARCH mereferensikan kolom dari tabel yang ditentukan dalam TABLE. Perilaku ini lebih mudah dipahami jika Anda memikirkan kumpulan hasil yang dibangun dengan mengambil output VECTOR_SEARCH dan menggabungkannya dengan data tabel.

Jika tabel yang ditentukan dalam TABLE argumen sudah berisi kolom bernama distance, perilakunya akan mirip dengan gabungan SQL di antara dua tabel yang berbagi nama kolom. Dalam kasus seperti itu, Anda harus menggunakan alias tabel untuk membedakan referensi kolom—jika tidak, kesalahan akan muncul.

Limitations

Pratinjau saat ini memiliki batasan berikut:

Hanya pasca-filter

Pencarian vektor terjadi sebelum menerapkan predikat apa pun. Predikat tambahan diterapkan hanya setelah vektor yang paling mirip dikembalikan. Sampel berikut mengembalikan 10 baris teratas dengan penyematan yang paling mirip dengan vektor @qvkueri , lalu menerapkan predikat yang ditentukan dalam WHERE klausul. Jika tidak ada dari 10 baris yang terkait dengan vektor yang dikembalikan oleh pencarian vektor yang memiliki accepted kolom sama dengan 1, hasilnya kosong.

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 tidak dapat digunakan dalam tampilan

VECTOR_SEARCH tidak dapat digunakan dalam isi tampilan.

Examples

Contoh 1

Contoh berikut menemukan 10 artikel paling mirip dengan Pink Floyd music style dalam wikipedia_articles_embeddings tabel.

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

Contoh 2

Sama seperti contoh 1, tetapi kali ini vektor kueri mengambil dari tabel lain alih-alih variabel.

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;

Contoh 3

Contoh end-to-end dasar menggunakan CREATE VECTOR INDEX dan fungsi terkait VECTOR_SEARCH . Penyematan dititipkan. Dalam skenario dunia nyata, penyematan dihasilkan menggunakan model penyematan dan AI_GENERATE_EMBEDDINGS, atau pustaka eksternal seperti OpenAI SDK.

Blok kode berikut menunjukkan VECTOR_SEARCH fungsi dengan penyematan tiruan:

  1. Mengaktifkan bendera pelacakan, yang diperlukan dalam pratinjau saat ini.
  2. Buat tabel dbo.Articles sampel dengan kolom embedding dengan vektor tipe data(5).
  3. Sisipkan data sampel dengan data penyematan tiruan.
  4. Buat indeks vektor pada dbo.Articles.embedding.
  5. Menunjukkan pencarian kesamaan vektor dengan VECTOR_SEARCH fungsi .
-- 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;