VECTOR_SEARCH adalah fungsi yang menemukan item paling mirip secara semantik berdasarkan vektor numerik berdimensi tinggi yang ditentukan, dengan melakukan kueri terhadap tabel vektor Milvus dari pekerjaan Flink SQL dan mengembalikan K entri paling mirip.
Batasan
-
Dukungan versi: Ververica Runtime (VVR) 11.3 dan versi setelahnya mendukung mode stream. VVR 11.4 dan versi setelahnya mendukung mode batch.
-
Tabel vektor: Milvus dan DLF Paimon (VVR 11.8 dan versi setelahnya) didukung sebagai tabel vektor.
-
Jenis stream: Hanya stream tipe insert-only yang didukung (stream yang hanya berisi pesan
INSERT). -
Mode eksekusi:
VECTOR_SEARCHhanya 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
| Parameter | Tipe | Deskripsi |
|---|---|---|
TABLE <SEARCH_TABLE> |
TABLE | Nama tabel vektor. |
DESCRIPTOR(<COLUMN_TO_SEARCH>) |
DESC | Kolom vektor terindeks dalam tabel vektor. Data masukan dibandingkan terhadap kolom ini untuk menghitung kemiripan. |
COLUMN_TO_QUERY |
ARRAY<FLOAT> / ARRAY<DOUBLE> |
Kolom penyematan dari stream input, seperti penyematan gambar atau teks yang diunggah. |
TOP_K |
INT | Jumlah maksimum entri mirip yang dikembalikan per baris input. |
CONFIG |
MAP<STRING,STRING> |
Parameter waktu proses opsional. Lihat Parameter waktu proses. |
Nilai kembalian
VECTOR_SEARCH mengembalikan sebuah tabel. Setiap baris berisi semua kolom dari tabel vektor ditambah kolom score bertipe DOUBLE. Kolom score menunjukkan tingkat kemiripan antara data masukan dan data keluaran.
Parameter waktu proses
Teruskan parameter waktu proses sebagai MAP<STRING,STRING> dalam argumen CONFIG, contohnya: MAP['async', 'false'].
Secara default, mesin memilih mode eksekusi berdasarkan dukungan konektor Milvus. Jika konektor mendukung mode asinkron maupun sinkron, mesin memprioritaskan mode asinkron untuk memaksimalkan throughput. Atur async secara eksplisit untuk mengganti perilaku ini.
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
async |
Boolean | (tidak ada) | Apakah menggunakan mode asinkron. Jika konektor tidak mendukung mode yang ditentukan, mesin akan melaporkan error. |
max-concurrent-operations |
Integer | 10 |
Jumlah maksimum permintaan konkuren dalam mode asinkron. |
output-mode |
Enum | ORDERED |
Mode output untuk operasi asinkron. Nilai yang valid: ORDERED, ALLOW_UNORDERED. Untuk detail selengkapnya, lihat Async I/O — Order of results. |
timeout |
Duration | 3 min |
Timeout untuk operasi asinkron, dihitung sejak pemanggilan pertama hingga selesai. Periode ini dapat mencakup beberapa kali retry dan diatur ulang saat terjadi failover. |
Contoh
Data uji
vector_table:
| id | topic | vector_index |
|---|---|---|
| 1 | "BigData" | [1, 1, 0] |
| 2 | "Streaming" | [-5, -12, -13] |
| 3 | "Batch" | [5, 12, 13] |
query_table:
| id | user_keyword | embedding |
|---|---|---|
| 1 | "Spark" | [5, 12, 13] |
| 2 | "Flink" | [-5, -12, -13] |
Kueri
Pernyataan berikut menggunakan setiap baris dalam query_table untuk mencari vector_table dan mengambil dua catatan paling mirip. Opsi MAP['async', 'false'] secara eksplisit mengaktifkan mode sinkron.
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" |