Anda dapat menggunakan fitur kueri vektor tetangga terdekat (KNN) untuk melakukan pencarian tetangga terdekat berdasarkan vektor. Dengan cara ini, Anda dapat menemukan item data yang memiliki kemiripan tertinggi dengan vektor yang ingin Anda kueri dalam dataset berskala besar. Fitur ini cocok untuk berbagai skenario seperti sistem rekomendasi, pengambilan gambar dan video, pemrosesan bahasa alami (NLP), dan pencarian semantik.
Untuk informasi lebih lanjut tentang fitur kueri vektor KNN, lihat Ikhtisar.
Catatan penggunaan
Untuk menggunakan fitur kueri vektor KNN, tipe kolom tempat bidang Vektor dipetakan di tabel data harus String. Saat membuat indeks pencarian, Anda harus mengatur tipe bidang tempat kolom String dipetakan ke Vektor. Kemudian, tentukan jumlah dimensi dan tipe data dari bidang Vektor, serta algoritma yang ingin Anda gunakan untuk mengukur jarak antara vektor.
Untuk menjalankan pernyataan SQL guna menggunakan fitur kueri vektor KNN, Anda harus membuat tabel pemetaan untuk indeks pencarian yang dibuat untuk tabel data. Untuk informasi tentang cara membuat tabel pemetaan untuk indeks pencarian, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.
Pemetaan tipe data
Tipe data dalam tabel | Tipe data dalam indeks pencarian | Data SQL dalam SQL |
String | Tipe Vektor. Jumlah dimensi dan tipe data dari bidang Vektor serta algoritma yang digunakan untuk mengukur jarak antara vektor ditentukan. | VARCHAR (kunci utama) |
MEDIUMTEXT (kolom yang telah ditentukan sebelumnya) |
Buat tabel pemetaan untuk indeks pencarian
Jika Anda menjalankan pernyataan CREATE TABLE untuk membuat tabel pemetaan untuk indeks pencarian, metode yang digunakan untuk membuat bidang Vektor sama dengan metode yang digunakan untuk membuat bidang tipe lainnya. Anda hanya perlu menentukan nama dan tipe data yang valid untuk bidang Vektor. Saat membuat tabel pemetaan untuk indeks pencarian, kami sarankan Anda menentukan tipe MEDIUMTEXT sebagai tipe data yang dipetakan dalam SQL untuk bidang tipe Vektor.
Contoh pernyataan SQL berikut memberikan contoh cara membuat tabel pemetaan untuk indeks pencarian yang berisi bidang tipe Vektor:
CREATE TABLE `test_table__test_table_index`(
`col_vector` MEDIUMTEXT
)
ENGINE='searchindex'
ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';Lakukan kueri vektor KNN
VECTOR_QUERY_FLOAT32
Anda dapat menggunakan fungsi VECTOR_QUERY_FLOAT32 untuk melakukan pencarian tetangga terdekat berdasarkan vektor.
Ekspresi SQL
VECTOR_QUERY_FLOAT32(fieldName, float32QueryVector,topk, filter)Parameter
Parameter
Tipe
Diperlukan
Deskripsi
fieldName
string
Ya
Nama bidang yang ingin Anda cocokkan. Untuk melakukan kueri vektor KNN, tipe bidang harus Vektor dalam indeks pencarian.
float32QueryVector
string
Ya
Vektor yang ingin Anda kueri kesamaannya.
PentingJumlah dimensi harus sesuai dengan jumlah dimensi dari bidang Vektor dalam indeks pencarian.
topK
int
Ya
Hasil kueri top K yang memiliki kesamaan tertinggi dengan vektor yang ingin Anda kueri. Untuk informasi tentang nilai maksimum parameter topK, lihat Batas indeks pencarian.
PentingNilai K yang lebih tinggi menunjukkan laju recall yang lebih tinggi, latensi kueri, dan biaya yang lebih tinggi.
Jika nilai parameter topK kurang dari nilai parameter limit dalam pernyataan SQL, server secara otomatis menggunakan nilai parameter limit sebagai nilai parameter topK.
filter
string
Tidak
Filter. Anda dapat menggunakan kombinasi kondisi kueri yang bukan merupakan kondisi kueri vektor KNN.
Contoh
Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 10 nilai teratas di kolom col_vector tabel exampletable yang memiliki kesamaan tertinggi dengan
[1.5, -1.5, 2.5, -2.5]:SELECT * FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 10) limit 10;
SCORE()
Anda dapat menggunakan fungsi SCORE() untuk mengkueri skor relevansi hasil kueri. Skor yang lebih tinggi menunjukkan kesamaan yang lebih tinggi.
Ekspresi SQL
SCORE()Contoh
Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 10 nilai teratas di kolom col_vector tabel exampletable yang memiliki kesamaan tertinggi dengan
[1.5, -1.5, 2.5, -2.5]dan menampilkan skor relevansi hasil kueri:SELECT *,SCORE() FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 10) limit 10;
Kombinasi kueri vektor KNN dan kondisi kueri lainnya
Anda dapat menggunakan kueri vektor KNN dan kondisi kueri lainnya dalam berbagai kombinasi. Efek kueri bervariasi berdasarkan kombinasi yang digunakan. Dalam contoh pada bagian ini, sejumlah kecil data memenuhi kondisi filter.
Dalam contoh ini, 100 juta gambar disimpan dalam sebuah tabel dan 50.000 gambar milik Pengguna A. Di antara 50.000 gambar tersebut, 50 disimpan pada tahun 2024. Pengguna A ingin mencari 10 gambar yang memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 50 gambar tersebut.
Saat pernyataan SQL sampel berikut dieksekusi, filter digunakan untuk mendapatkan semua gambar Pengguna A yang disimpan pada tahun 2024, total 50 gambar. Kemudian, 10 gambar teratas yang memiliki kesamaan tertinggi dengan gambar yang ingin dikueri oleh Pengguna A di antara 50 gambar tersebut ditemukan dan dikembalikan kepada Pengguna A. Skor relevansi masing-masing dari 10 gambar tersebut ditampilkan.
SELECT *,SCORE() FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 100, user="a" and year_num=2024) limit 10;Saat pernyataan SQL sampel berikut dieksekusi, 500 gambar teratas yang memiliki kesamaan tertinggi dengan gambar yang ingin dikueri oleh Pengguna A di antara 100 juta gambar dikembalikan. Kemudian, 10 gambar milik Pengguna A yang disimpan pada tahun 2024 dan memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 500 gambar tersebut ditemukan dan dikembalikan kepada Pengguna A dan skor relevansi masing-masing dari 10 gambar tersebut ditampilkan. Gambar teratas 500 mungkin tidak termasuk semua 50 gambar milik Pengguna A yang disimpan pada tahun 2024. Saat pernyataan SQL sampel ini dieksekusi, Pengguna A mungkin gagal mendapatkan 10 gambar yang memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 50 gambar tersebut. Dalam kasus ekstrem, Pengguna A mungkin tidak mendapatkan gambar apa pun.
SELECT *,SCORE() FROM exampletable WHERE user="a" and year_num=2024 and VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 500) limit 10;
Prosedur
Dalam contoh ini, tabel data bernama vector_query_table digunakan. Tabel data terdiri dari kolom kunci utama pk bertipe String, kolom atribut col_vector bertipe String, dan kolom atribut col_keyword bertipe String.
Untuk melakukan kueri vektor KNN dalam SQL, buat indeks pencarian untuk tabel data, buat tabel pemetaan untuk indeks pencarian, lalu jalankan pernyataan SQL. Prosedur:
Buat indeks pencarian dan konfigurasikan bidang Vektor. Untuk informasi lebih lanjut, lihat Gunakan Indeks Pencarian di Konsol Tablestore dan Gunakan SDK Tablestore.
CatatanJika tidak ada bidang Vektor yang ditentukan dalam indeks pencarian yang ingin Anda gunakan, Anda dapat memodifikasi skema indeks pencarian untuk mengonfigurasi bidang Vektor. Untuk informasi lebih lanjut, lihat Modifikasi Dinamis Skema Indeks Pencarian.
Gambar berikut menunjukkan cara membuat indeks pencarian di Konsol Tablestore.
Dalam contoh ini, indeks pencarian bernama
vector_query_table_indexdibuat. Indeks pencarian terdiri dari bidangcol_vectorbertipe Vektor dan bidangcol_keywordbertipe String. Bidangcol_vectorbertipe Vektor dipetakan ke kolom col_vector bertipe String dalam tabel data.
Gambar berikut menunjukkan skema indeks pencarian.

Buat tabel pemetaan untuk indeks pencarian. Untuk informasi lebih lanjut, lihat Gunakan Fitur Kueri SQL di Konsol Tablestore dan Gunakan SDK Tablestore untuk Menggunakan Fitur Kueri SQL.
Dalam contoh ini, tabel pemetaan bernama
vector_query_table__vector_query_table_indexdibuat untuk indeks pencarian. Tipe data dari bidang tempat bidang Vektor bernamacol_vectordalam tabel pemetaan dipetakan adalah MEDIUMTEXT dalam SQL. Untuk informasi lebih lanjut, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.Anda dapat menjalankan pernyataan SQL sampel berikut untuk membuat tabel pemetaan:
CREATE TABLE `vector_query_table__vector_query_table_index`( `col_vector` MEDIUMTEXT, `col_keyword` MEDIUMTEXT ) ENGINE='searchindex', ENGINE_ATTRIBUTE='{"index_name":"vector_query_table_index","table_name":"vector_query_table"}';(Opsional) Setelah Anda membuat tabel pemetaan untuk indeks pencarian, Anda dapat melakukan operasi berikut berdasarkan kebutuhan bisnis Anda.
Kueri informasi tentang tabel
Jalankan pernyataan SQL berikut untuk mengkueri informasi tentang tabel pemetaan untuk indeks pencarian:
DESCRIBE vector_query_table__vector_query_table_index;Gambar berikut menunjukkan hasil kueri.

Kueri data dalam tabel
Jalankan pernyataan SQL berikut untuk mengkueri data dalam tabel pemetaan untuk indeks pencarian:
SELECT * FROM vector_query_table__vector_query_table_index;Gambar berikut menunjukkan hasil kueri. Sebagai contoh, tabel pemetaan
vector_query_table__vector_query_table_indexuntuk indeks pencarian berisi 10 baris data.
Lakukan kueri vektor KNN untuk mengkueri data. Untuk informasi lebih lanjut, lihat Kueri Data.
Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 5 nilai teratas di kolom col_vector yang memiliki kesamaan tertinggi dengan
[1.5, 2.0, 2.5, 1.7]dan menampilkan skor relevansi hasil kueri:SELECT *,SCORE() FROM vector_query_table__vector_query_table_index WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, 2.0, 2.5, 1.7]", 5) limit 5;Gambar berikut menunjukkan hasil kueri.

Batasan
Anda hanya dapat menggunakan fungsi VECTOR_QUERY_FLOAT32 saat mengkueri data menggunakan tabel pemetaan yang dibuat untuk indeks pencarian.
Saat menggunakan fungsi VECTOR_QUERY_FLOAT32, Anda harus menggunakan klausa LIMIT. Anda tidak dapat menggunakan klausa HAVING.
Fungsi VECTOR_QUERY_FLOAT32 hanya dapat digunakan sebagai klausa WHERE dari pernyataan SELECT tetapi tidak dapat digunakan sebagai ekspresi kolom pernyataan SELECT, sebagai fungsi agregat, atau untuk pengelompokan atau pengurutan.
Anda harus menggunakan fungsi SCORE() bersama dengan fungsi VECTOR_QUERY_FLOAT32. Anda tidak dapat menggunakan fungsi SCORE() secara terpisah.
Fungsi SCORE() hanya dapat digunakan sebagai ekspresi kolom pernyataan SELECT. Fungsi ini tidak dapat digunakan sebagai klausa WHERE dari pernyataan SELECT, sebagai fungsi agregasi, atau untuk pengurutan.