Topik ini menjelaskan cara melakukan pencarian vektor menggunakan fungsi VECTOR_SEARCH_AGG. Pencarian vektor memungkinkan Anda menemukan item yang paling mirip secara semantik berdasarkan vektor numerik berdimensi tinggi yang ditentukan. Berbeda dengan fungsi VECTOR_SEARCH, fungsi ini mengembalikan semua item yang cocok dalam bentuk array.
Batasan
Mode stream didukung di Realtime Compute for Apache Flink yang menggunakan mesin Ververica Runtime (VVR) versi 11.3 atau lebih baru. Mode batch didukung di mesin VVR versi 11.4 atau lebih baru.
Pencarian hanya dapat dilakukan pada tabel vektor Milvus.
Hanya aliran non-updating yang didukung. Aliran non-updating hanya berisi pesan INSERT.
Sintaksis
VECTOR_SEARCH_AGG(
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 input, seperti penyematan citra atau teks yang diunggah pengguna. Kolom ini digunakan untuk pencocokan kemiripan terhadap kolom vektor terindeks. |
TOP_K | INT | Jumlah maksimum catatan data yang mirip untuk dikembalikan. |
CONFIG | MAP<STRING,STRING> | Parameter waktu proses yang dapat dikonfigurasi. |
Pengembalian
VECTOR_SEARCH_AGG mengembalikan tabel data dengan satu catatan. Skema tabelnya adalah ROW<ARRAY<ROW>>.
Kolom array diberi nama search_results. Setiap ROW dalam array berisi semua kolom dari tabel vektor dan kolom tambahan bernama score. Kolom score bertipe DOUBLE dan menunjukkan tingkat kemiripan antara data masukan dan data keluaran.
Parameter waktu proses
Parameter | Tipe data | Nilai default | Deskripsi |
async | Boolean | (none) | Menentukan apakah mode asinkron diaktifkan. Jika konektor yang digunakan oleh tabel vektor tidak mendukung mode yang ditentukan, mesin akan melaporkan 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 | ORDERED | Mode output untuk operasi asinkron. Nilai yang mungkin:
Untuk informasi selengkapnya tentang nilai-nilai ini, lihat Async I/O. |
timeout | Duration | 3 min | Periode timeout sejak panggilan pertama hingga operasi asinkron selesai. Periode ini dapat mencakup beberapa kali percobaan ulang dan diatur ulang saat terjadi failover. |
Contoh
Data uji
Asumsikan tabel vektor 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 tabel data query_table berisi data berikut:
id | user_keyword | embedding |
1 | "Spark" | [5, 12, 13] |
2 | "Flink" | [-5, -12, -13] |
Pernyataan uji
Pernyataan SQL berikut melakukan pencarian pada vector_table untuk setiap catatan dalam query_table guna mengambil dua item paling mirip.
SELECT user_keyword, search_results
FROM
query_table,
LATERAL TABLE (VECTOR_SEARCH_AGG(
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
))Output
user_keyword | search_results |
"Spark" | [(3, "Batch", [5.0, 12.0, 13.0], 1.0), (1, "BigData", [1.0, 1.0, 0.0], 0.6538461538461539)] |
"Flink" | [(2, "Streaming", [-5.0, -12.0, -13.0], 1.0), (1, "BigData", [1.0, 1.0, 0.0], -0.6538461538461539)] |