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.
-
Parameter
OUTPUT_COLUMNSdidukung mulai dari VVR 11.9 Realtime Compute for Apache Flink. -
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 data |
Deskripsi |
|
async |
Boolean |
Menentukan apakah akan mengaktifkan mode asinkron. Jika konektor tabel vektor tidak mendukung mode yang ditentukan, mesin akan mengembalikan error. |
|
max-concurrent-operations |
Integer |
Jumlah maksimum permintaan konkuren dalam mode asinkron. |
|
output-mode |
Enum |
Kolom fitur vektor pada input, seperti vektor penyematan gambar atau teks yang diunggah pengguna. Kolom ini dicocokkan dengan kolom vektor terindeks berdasarkan kemiripan. |
|
TOP_K |
INT |
Jumlah maksimum catatan mirip yang dikembalikan. |
|
CONFIG |
MAP<STRING,STRING> |
Parameter runtime yang dapat Anda konfigurasi. |
|
OUTPUT_COLUMNS |
DESC |
Opsional. Menentukan kolom yang dikembalikan dalam hasil pencarian vektor. Anda dapat memilih kolom tingkat atas dari tabel vektor dan kolom kemiripan |
Nilai kembalian
VECTOR_SEARCH mengembalikan sebuah tabel. Jika parameter OUTPUT_COLUMNS tidak ditentukan, setiap baris berisi semua kolom dari tabel vektor serta satu kolom tambahan score, yang konsisten dengan perilaku versi sebelumnya. Jika OUTPUT_COLUMNS ditentukan, setiap baris hanya berisi kolom yang dinyatakan, sesuai urutan yang ditetapkan dalam DESCRIPTOR.
Kolom score bertipe DOUBLE dan merepresentasikan tingkat kemiripan antara data masukan dan setiap hasil pencarian. Kolom ini dapat dipilih atau dikecualikan melalui parameter OUTPUT_COLUMNS. Apabila kolom bernama score sudah ada di tabel vektor, sistem akan memberikan nama unik untuk kolom kemiripan yang dihasilkan, misalnya score0. Dalam kasus tersebut, gunakan nama kolom aktual tersebut dalam OUTPUT_COLUMNS.
Parameter OUTPUT_COLUMNS tidak boleh kosong, tidak mendukung bidang bersarang (nested fields), dan tidak boleh mengandung kolom duplikat.
Parameter runtime
|
Parameter |
Tipe data |
Nilai default |
Deskripsi |
|
async |
Boolean |
(none) |
Menentukan apakah akan mengaktifkan mode asinkron. Jika konektor tabel vektor tidak mendukung mode yang ditentukan, mesin akan mengembalikan error. Secara default, mesin memilih mode eksekusi berdasarkan mode yang didukung oleh konektor. Jika konektor mendukung mode asinkron dan sinkron, mesin akan memprioritaskan mode asinkron untuk meningkatkan throughput keseluruhan. |
|
max-concurrent-operations |
Integer |
10 |
Jumlah maksimum permintaan konkuren dalam mode asinkron. |
|
output-mode |
Enum |
|
Mode output operasi asinkron. Nilai yang valid:
Untuk informasi lebih lanjut tentang kedua nilai tersebut, lihat Async I/O. |
|
timeout |
Duration |
3min |
Periode timeout sejak pemanggilan pertama hingga operasi asinkron selesai. Periode ini dapat mencakup beberapa percobaan ulang (retry) dan diatur ulang saat terjadi failover. |
Contoh
Data uji
Tabel vektor vector_table berisi data berikut:
|
id |
topic |
vector_index |
|
1 |
'Spark' |
[5, 12, 13] |
|
2 |
'Flink' |
[-5, -12, -13] |
|
3 |
'Batch' |
[5, 12, 13] |
Tabel kueri query_table berisi data berikut:
|
id |
user_keyword |
embedding |
|
1 |
'Spark' |
[5, 12, 13] |
|
2 |
'Flink' |
[-5, -12, -13] |
Kueri
Untuk setiap baris pada query_table, pernyataan SQL berikut melakukan pencarian terhadap vector_table dan mengembalikan dua entri 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 |
score |
|
'Spark' |
'Batch' |
1.0 |
|
'Spark' |
'BigData' |
0.6538461538461539 |
|
'Flink' |
'Streaming' |
1.0 |
|
'Flink' |
'BigData' |
-0.6538461538461539 |