Pencarian vektor menggunakan Tablestore SDK untuk Node.js mengembalikan data terdekat dalam indeks pencarian berdasarkan kemiripan vektor, serta mendukung ambang batas skor, jumlah kandidat, dan filter non-vektor.
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi client Tablestore.
-
Indeks pencarian telah dibuat dan bidang vektor telah dikonfigurasi pada tabel data. Untuk informasi selengkapnya, lihat Buat indeks pencarian.
Catatan penggunaan
-
Fitur kueri vektor KNN didukung oleh Tablestore SDK untuk Node.js versi 5.5.0 atau yang lebih baru. Pastikan Anda telah menginstal versi Tablestore SDK untuk Node.js yang didukung.
CatatanUntuk informasi mengenai riwayat versi Tablestore SDK untuk Node.js, lihat Riwayat versi Tablestore SDK untuk Java.
-
Batasan berlaku untuk jumlah tipe bidang vektor, dimensi, dan properti lainnya. Untuk informasi selengkapnya, lihat Batasan indeks pencarian.
-
Indeks pencarian dipartisi di sisi server. Setiap partisi mengembalikan TopK tetangga terdekatnya sendiri, dan hasil tersebut kemudian diagregasi di node klien. Oleh karena itu, jika token digunakan untuk melakukan paginasi melalui seluruh data, jumlah total baris yang dikembalikan bergantung pada jumlah partisi di sisi server.
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
fieldName |
Ya |
Nama bidang vektor. |
|
topK |
Ya |
Jumlah tetangga terdekat yang akan dikembalikan. Untuk nilai maksimum, lihat Batasan indeks pencarian. Penting
Nilai K yang lebih besar meningkatkan recall, tetapi juga meningkatkan latensi kueri dan biaya. |
|
float32QueryVector |
Ya |
Vektor kueri yang digunakan untuk pencarian kemiripan. |
|
minScore |
Tidak |
Ambang batas skor minimum. Hanya baris dengan skor lebih besar dari nilai ini yang dikembalikan. Nilainya harus lebih besar dari atau sama dengan 0. Default: 0. |
|
filter |
Tidak |
Filter yang mendukung kombinasi apa pun dari kondisi kueri non-vektor. |
Contoh
Kode contoh berikut menunjukkan cara mengkueri 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 berada di 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 secara 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
Referensi
Jenis kueri berikut didukung oleh indeks pencarian: kueri tepat, kueri istilah, Pencocokan semua kueri, kueri cocok, kueri frasa cocok, kueri awalan, kueri rentang, kueri wildcard, kueri Boolean, kueri geografis, kueri bersarang, kueri vektor, dan kueri exists. Anda dapat memilih jenis kueri sesuai kebutuhan bisnis Anda.
Jika Anda ingin mengurutkan atau melakukan paginasi pada baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur pengurutan dan paginasi. Untuk informasi selengkapnya, lihat Pengurutan dan paginasi.
Jika Anda ingin menciutkan set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan cara ini, data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi selengkapnya, lihat Collapse (distinct).
Jika Anda ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris, Anda dapat melakukan operasi agregasi atau mengeksekusi pernyataan SQL. Untuk informasi selengkapnya, lihat Agregasi dan Kueri SQL.
Jika Anda ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris tersebut, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi selengkapnya, lihat Pemindaian paralel.