Topik ini menjelaskan cara menggunakan fungsi VECTOR_SEARCH untuk pencarian vektor. Fungsi ini menemukan item yang paling mirip secara semantik berdasarkan vektor numerik berdimensi tinggi yang diberikan.
Batasan
Dukungan versi: Ververica Runtime (VVR) 11.3+ mendukung mode stream, sedangkan VVR 11.4+ mendukung mode batch.
Tabel vektor: Hanya Milvus yang didukung sebagai tabel vektor.
Jenis stream: Hanya stream non-updating yang didukung (hanya berisi pesan
INSERT).Mode eksekusi: Fungsi ini hanya berjalan dalam mode stream; mode batch tidak didukung.
Sintaksis
VECTOR_SEARCH(
TABLE <SEARCH_TABLE>,
DESCRIPTOR(<COLUMN_TO_SEARCH>),
<COLUMN_TO_QUERY>,
<TOP_K>[,
<CONFIG>]
)Parameter input
Parameter | Tipe data | Deskripsi |
TABLE <SEARCH_TABLE> | TABLE | Nama tabel vektor. |
DESCRIPTOR(<COLUMN_TO_SEARCH>) | DESC | Kolom vektor terindeks dalam tabel vektor. Data masukan dibandingkan dengan kolom ini untuk menghitung kemiripan. |
COLUMN_TO_QUERY | ARRAY<FLOAT>/ARRAY<DOUBLE> | Kolom fitur vektor dari data masukan, seperti penyematan citra atau teks yang diunggah. Kolom ini dicocokkan dengan kolom vektor terindeks untuk menemukan kemiripan. |
TOP_K | INT | Jumlah maksimum entri data serupa yang dikembalikan. |
CONFIG | MAP<STRING,STRING> | Parameter waktu proses yang dapat dikonfigurasi. |
Nilai kembalian
Fungsi VECTOR_SEARCH mengembalikan sebuah tabel yang setiap barisnya berisi semua kolom dari tabel vektor serta satu kolom skor tambahan. Kolom skor bertipe data DOUBLE dan menunjukkan tingkat kemiripan antara data masukan dan data keluaran.
Parameter waktu proses
Parameter | Tipe data | Bawaan | Deskripsi |
async | Boolean | (none) | Menentukan apakah mode asinkron diaktifkan. Jika konektor untuk tabel vektor tidak mendukung mode yang ditentukan, mesin akan melaporkan error. Secara bawaan, mesin memilih mode eksekusi berdasarkan dukungan konektor. Jika konektor mendukung mode asinkron dan sinkron, mesin memprioritaskan mode asinkron untuk meningkatkan throughput. |
max-concurrent-operations | Integer |
| Jumlah maksimum permintaan konkuren dalam mode asinkron. |
output-mode | Enum |
| Mode output untuk operasi asinkron. Nilai yang valid:
Untuk informasi lebih lanjut tentang nilai-nilai ini, lihat Async I/O. |
timeout | Duration | 3 min | Timeout untuk operasi asinkron, dihitung sejak panggilan pertama hingga penyelesaian. Periode ini dapat mencakup beberapa retry dan diatur ulang saat failover. |
Contoh
Data uji
Asumsikan vector_table berisi data berikut:
id | topic | vector_index |
1 | "BigData" | [1, 1, 0] |
2 | "Streaming" | [-5, -12, -13] |
3 | "Batch" | [5, 12, 13] |
Asumsikan query_table berisi data berikut:
id | user_keyword | embedding |
1 | "Spark" | [5, 12, 13] |
2 | "Flink" | [-5, -12, -13] |
Pernyataan uji
Pernyataan SQL berikut menggunakan setiap baris dalam query_table untuk mencari vector_table dan mengambil dua catatan paling mirip.
SELECT user_keyword, topic
FROM
query_table,
LATERAL TABLE (VECTOR_SEARCH(
SEARCH_TABLE => TABLE vector_table,
COLUMN_TO_SEARCH => DESCRIPTOR(vector_index),
COLUMN_TO_QUERY => query_table.embedding,
TOP_K => 2,
MAP['async', 'false'] -- Aktifkan mode sinkron
))Hasil
user_keyword | topic |
"Spark" | "Batch" |
"Spark" | "BigData" |
"Flink" | "Streaming" |
"Flink" | "BigData" |