Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
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 @qv
kueri , 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:
- Mengaktifkan bendera pelacakan, yang diperlukan dalam pratinjau saat ini.
- Buat tabel
dbo.Articles
sampel dengan kolomembedding
dengan vektor tipe data(5). - Sisipkan data sampel dengan data penyematan tiruan.
- Buat indeks vektor pada
dbo.Articles.embedding
. - 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;