Fitur kueri vektor k-nearest neighbor (KNN) memungkinkan pencarian tetangga terdekat secara aproksimasi berdasarkan vektor. Fitur ini membantu menemukan item data yang paling mirip dengan vektor yang di-query dalam dataset berskala besar.
Prasyarat
Indeks pencarian dibuat untuk tabel data dan bidang vektor ditentukan.
Catatan penggunaan
Tablestore SDK for Java V5.17.0 atau lebih baru mendukung fitur kueri vektor KNN. Pastikan versi Tablestore SDK for Java yang benar telah diinstal.
CatatanUntuk informasi tentang riwayat versi Tablestore SDK for Java, lihat Riwayat Versi Tablestore SDK for Java.
Batas diberlakukan pada jumlah Bidang Vektor dan jumlah dimensi untuk sebuah Bidang Vektor. Untuk informasi lebih lanjut, lihat Batas Indeks Pencarian.
Server indeks pencarian memiliki beberapa partisi. Setiap partisi dari server indeks pencarian mengembalikan K tetangga terdekat teratas ke vektor yang ingin Anda query. K tetangga terdekat teratas yang dikembalikan oleh partisi digabungkan pada node klien. Jika Anda menggunakan token untuk query semua data per halaman, jumlah total baris dalam tanggapan terkait dengan jumlah partisi dari server indeks pencarian.
Parameter
Parameter | Diperlukan | Deskripsi |
fieldName | Ya | Nama bidang vektor. |
topK | Ya | K hasil kueri teratas yang memiliki kemiripan tertinggi sebagai vektor yang ingin Anda query. Untuk informasi tentang nilai maksimum parameter topK, lihat Batas indeks pencarian. Penting Nilai K yang lebih besar menunjukkan tingkat recall yang lebih tinggi, latensi kueri, dan biaya yang lebih tinggi. |
float32QueryVector | Ya | Vektor yang ingin Anda query kesamaannya. |
filter | Tidak | Filter. Anda dapat menggunakan kombinasi kondisi kueri yang bukan merupakan kondisi kueri vektor KNN. |
Contoh
Kode sampel berikut menunjukkan cara menanyakan 10 vektor teratas dalam tabel yang memiliki kemiripan tertinggi dengan vektor yang ditentukan. Dalam contoh ini, 10 vektor teratas harus memenuhi kondisi kueri berikut: nilai kolom Col_Keyword adalah hangzhou dan nilai kolom Col_Long kurang dari 4.
private static void knnVectorQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
KnnVectorQuery query = new KnnVectorQuery();
query.setFieldName("Col_Vector");
query.setTopK(10); // Mengembalikan 10 vektor teratas dalam tabel yang memiliki kemiripan tertinggi dengan vektor yang ditentukan.
query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
// Tentukan kondisi kueri untuk 10 vektor teratas: nilai kolom Col_Keyword adalah hangzhou dan nilai kolom Col_Long kurang dari 4.
query.setFilter(QueryBuilders.bool()
.must(QueryBuilders.term("Col_Keyword", "hangzhou"))
.must(QueryBuilders.range("Col_Long").lessThan(4))
);
searchQuery.setQuery(query);
searchQuery.setLimit(10);
// Urutkan hasil kueri berdasarkan skor.
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("Col_Keyword", "Col_Long"));
searchRequest.setColumnsToGet(columnsToGet);
// Panggil operasi Pencarian.
SearchResponse resp = client.search(searchRequest);
for (SearchHit hit : resp.getSearchHits()) {
// Tampilkan skor.
System.out.println(hit.getScore());
// Tampilkan data.
System.out.println(hit.getRow());
}
}FAQ
Bagaimana cara mengoptimalkan kinerja kueri vektor KNN Tablestore?
Referensi
Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri istilah, Pencocokan Semua Kueri, kueri cocok, permintaan pencocokan frasa, kueri awalan, kueri rentang, kueri wildcard, kueri geografis, Kueri Vektor KNN, kueri Boolean, kueri bersarang, dan kueri eksistensi. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk menanyakan data dari berbagai dimensi sesuai dengan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan paging. Untuk informasi lebih lanjut, lihat Melakukan Pengurutan dan Paging.
Anda dapat menggunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (Distinct).
Jika Anda ingin menganalisis data dalam tabel, Anda dapat memanggil operasi Pencarian untuk menggunakan fitur agregasi atau menggunakan fitur kueri SQL. Sebagai contoh, Anda dapat menanyakan nilai maksimum dan minimum, jumlah nilai, dan jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.