全部产品
Search
文档中心

Tablestore:Kueri vektor KNN

更新时间:Nov 04, 2025

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

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.

    Catatan

    Untuk 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