Fitur kueri vektor k-nearest neighbor (KNN) memungkinkan pencarian tetangga terdekat secara aproksimatif berdasarkan vektor, membantu menemukan item data yang paling mirip dengan vektor yang di-query dalam dataset berskala besar.
Prasyarat
Instans OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.
Indeks pencarian dibuat dan bidang vektor dikonfigurasi pada tabel data. Untuk informasi lebih lanjut, lihat Buat Indeks Pencarian.
Catatan penggunaan
Fitur kueri vektor KNN didukung oleh Tablestore SDK untuk Node.js versi 5.5.0 atau lebih baru. Pastikan bahwa versi Tablestore SDK untuk Node.js yang didukung telah diinstal.
CatatanUntuk informasi tentang riwayat versi Tablestore SDK untuk Node.js, lihat Riwayat Versi Tablestore SDK untuk Java.
Batas diberlakukan pada jumlah bidang Vektor dan jumlah dimensi untuk 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 ke vektor yang ingin Anda query. K tetangga terdekat yang dikembalikan oleh partisi digabungkan pada node klien. Jika Anda ingin menggunakan token untuk men-query semua data per halaman, jumlah total baris dalam tanggapan terkait dengan jumlah partisi 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 memberikan contoh cara men-query sepuluh tetangga terdekat dari vektor tertentu dalam tabel data. Dalam contoh ini, nilai kolom col_keyword dari vektor tetangga terdekat harus sama dengan "0", dan nilai kolom col_long dari vektor tetangga terdekat harus antara 0 dan 50.
const tableName = "<TABLE_ANME>"
const indexName = "<SEARCH_INDEX_NAME>"
async function knnVectorQuery() {
return new Promise(function (resolve, reject) {
let params = {
tableName: tableName,
indexName: indexName,
searchQuery: {
offset: 0,
limit: 10,
query: {
queryType: TableStore.QueryType.KNN_VECTOR_QUERY,
query: {
fieldName: "col_vector",
topK: TableStore.Long.fromNumber(10),
float32QueryVector: [1.0, 1.1, 1.2, -1.3],
filter: {
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
mustQueries: [
{
queryType: TableStore.QueryType.RANGE_QUERY,
query: {
fieldName: "col_long",
rangeFrom: TableStore.Long.fromNumber(0),
includeLower: true,
rangeTo: TableStore.Long.fromNumber(50),
includeUpper: true,
}
},
{
queryType: TableStore.QueryType.TERM_QUERY,
query: {
fieldName: "col_keyword",
term: "0",
}
},
],
}
},
},
},
sort: {
sorters: [
{
scoreSort: {
order: TableStore.SortOrder.SORT_ORDER_DESC // Urutkan hasil kueri berdasarkan skor dalam urutan menurun.
}
}
],
},
getTotalCount: false,
},
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
returnNames: ["col_long", "col_keyword"]
},
timeoutMs: 10000,
}
client.search(params, function (err, data) {
if (err) {
console.log('search error:', err.toString());
reject(err);
} else {
console.log('RequestId:', data.RequestId);
for (let i = 0; i < data.searchHits.length; i++) {
let hit = data.searchHits[i]
console.log('Score:', hit.score, 'Row:', hit.row);
}
resolve(data)
}
});
})
}
knnVectorQuery();FAQ
Bagaimana cara mengoptimalkan kinerja kueri vektor KNN Tablestore?
Referensi
Jenis kueri berikut didukung oleh indeks pencarian: kueri tepat, kueri istilah, Pencocokan Semua Kueri, kueri cocok, permintaan pencocokan frasa, kueri awalan, kueri rentang, kueri wildcard, kueri Boolean, kueri geografis, kueri bersarang, kueri vektor, dan kueri eksistensi. Anda dapat memilih jenis kueri untuk men-query data berdasarkan kebutuhan bisnis Anda.
Jika Anda ingin mengurutkan atau mem-paginasi baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur pengurutan dan paginasi. Untuk informasi lebih lanjut, lihat Pengurutan dan Paginasi.
Jika Anda ingin meruntuhkan set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). 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 data, seperti mendapatkan nilai ekstrem, jumlah, dan total jumlah baris, Anda dapat melakukan operasi agregasi atau menjalankan pernyataan SQL. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin dengan cepat 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.