Bagikan melalui


VECTOR_SEARCH (Transact-SQL) (Pratinjau)

Pratinjau SQL Server 2025 (17.x)

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 Vektor di Mesin Database SQL.

Fitur pratinjau

Nota

Fungsi ini dalam pratinjau dan dapat berubah. Pastikan untuk membaca persyaratan penggunaan pratinjau dalam Perjanjian Tingkat Layanan (SLA) untuk Layanan Online.

Fitur ini masih dalam pratinjau. Untuk menggunakan fitur ini, Anda harus mengaktifkan bendera pelacakan berikut:

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

Pastikan untuk memeriksa batasan saat ini sebelum menggunakannya.

Sintaksis

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]

Argumen

TABLE = object [AS source_table_alias]

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

COLUMN = 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 dikembalikan memiliki semua kolom dari tabel yang ditentukan dalam argumen TABLE, ditambah kolom tambahan distance . Kolom distance berisi jarak antara vektor yang diberikan dalam argumen COLUMN dan vektor yang ditentukan dalam argumen SIMILAR_TO.

Keterbatasan

Pratinjau saat ini memiliki batasan berikut:

Hanya pasca-pemfilteran

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
  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.

Contoh

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

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')
    ) 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

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
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;