Gunakan KnnVectorQuery untuk melakukan pencarian tetangga terdekat aproksimasi dengan vektor numerik guna menemukan item data yang paling mirip dalam set data berskala besar.
Prasyarat
-
Buat indeks pencarian untuk tabel data dan tentukan bidang vektor.
Catatan penggunaan
-
Pastikan versi terbaru Tablestore SDK untuk Go telah diinstal. Untuk informasi selengkapnya, lihat Instal Tablestore SDK untuk Go.
Batas berlaku untuk jumlah tipe bidang vektor, dimensi, dan properti lainnya. Untuk informasi selengkapnya, lihat Batas indeks pencarian.
Indeks pencarian dipartisi di sisi server. Setiap partisi mengembalikan TopK tetangga terdekatnya sendiri, lalu hasil tersebut 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 |
Hasil kueri Top K dengan kemiripan tertinggi terhadap vektor yang ingin Anda kueri. Untuk informasi mengenai nilai maksimum parameter TopK, lihat Batas indeks pencarian. Penting
Nilai K yang lebih besar meningkatkan tingkat recall, latensi kueri, dan biaya. |
Float32QueryVector | Ya | Vektor yang digunakan untuk pencarian kemiripan. |
MinScore | Tidak | Ambang batas skor. Kueri hanya mengembalikan baris dengan skor lebih besar dari nilai ini. Nilainya harus 0 atau lebih. Nilai default-nya adalah 0. |
|
Filter |
Tidak |
Filter. Anda dapat menggunakan kombinasi kondisi kueri yang bukan merupakan kondisi kueri vektor KNN. |
Contoh
Contoh ini mengkueri 10 tetangga terdekat teratas terhadap suatu vektor tertentu, hanya mengambil hasil dengan skor lebih besar dari 0,1 dan kolom col_keyword bernilai "hangzhou".
func query(client *tablestore.TableStoreClient) {
searchQuery := search.NewSearchQuery()
searchQuery.Query = &search.KnnVectorQuery{
FieldName: "col_vector",
TopK: proto.Int32(10),
MinScore: proto.Float32(0.1),
Float32QueryVector: []float32{-1.4, 1, 1, 1.2},
Filter: &search.BoolQuery{
ShouldQueries: []search.Query{
&search.TermQuery{
FieldName: "col_keyword",
Term: "hangzhou",
},
},
},
}
searchQuery.Sort = &search.Sort{
Sorters: []search.Sorter{
search.NewScoreSort(), // Urutkan berdasarkan skor.
},
}
searchRequest := &tablestore.SearchRequest{
SearchQuery: searchQuery,
TableName: "<TABLE_NAME>",
IndexName: "<SEARCH_INDEX_NAME>",
ColumnsToGet: &tablestore.ColumnsToGet{Columns: []string{
"col_keyword",
"col_long",
}},
}
if resp, err := client.Search(searchRequest); err != nil {
fmt.Println("kueri vektor float32 gagal: ", err)
} else {
for _, hit := range resp.SearchHits {
fmt.Println("skor:", *hit.Score)
jsonBody, err := json.Marshal(hit.Row)
if err != nil {
panic(err)
}
fmt.Println("baris: ", string(jsonBody))
}
}
}FAQ
Referensi
Saat menggunakan indeks pencarian untuk mengkueri data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri istilah, Pencocokan semua kueri, kueri cocok, kueri frasa cocok, kueri awalan, kueri rentang, kueri wildcard, kueri geografis, Kueri Boolean, Kueri vektor KNN, kueri bersarang, dan kueri eksis. Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur Pengurutan dan paging. Untuk informasi selengkapnya, lihat Pengurutan dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menciutkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi selengkapnya, lihat Collapse (menghapus duplikat).
Jika ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi operasi Search atau mengeksekusi pernyataan SQL. Misalnya, Anda dapat memperoleh nilai minimum dan maksimum, jumlah total, serta jumlah baris. Untuk informasi selengkapnya, lihat Agregasi dan Kueri SQL.
Jika ingin memperoleh 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 Lakukan pemindaian paralel.