Fitur kueri vektor k-nearest neighbor (KNN) memungkinkan pencarian tetangga terdekat berdasarkan vektor, membantu menemukan item data yang paling mirip dengan vektor yang di-query dalam set data berskala besar.
Prasyarat
Indeks pencarian dibuat untuk tabel data dan bidang vektor ditentukan.
Catatan penggunaan
Tablestore SDK untuk Python versi 5.4.4 atau lebih baru mendukung fitur kueri vektor KNN. Disarankan menggunakan versi terbaru dari Tablestore SDK untuk Python.
CatatanUntuk informasi tentang sejarah versi Tablestore SDK untuk Python, lihat Sejarah Versi Tablestore SDK untuk Python.
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 mengembalikan K tetangga terdekat ke vektor yang ingin Anda query. Hasil dari partisi digabungkan pada node klien. Jika Anda 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 |
field_name | Ya | Nama dari bidang vektor. |
top_k | Ya | K hasil kueri teratas yang memiliki kesamaan tertinggi sebagai vektor yang ingin Anda query. Untuk informasi tentang nilai maksimum parameter top_k, lihat Batas indeks pencarian. Penting Nilai k yang lebih besar menunjukkan tingkat recall yang lebih tinggi, latensi kueri, dan biaya. |
float32_query_vector | Ya | Vektor yang ingin Anda query kesamaannya. |
filter | Tidak | Filter. Anda dapat menggunakan kombinasi kondisi kueri yang bukan merupakan kondisi kueri vektor KNN. |
Contoh
Berikut adalah contoh kode untuk men-query 10 vektor teratas dalam tabel yang memiliki kesamaan tertinggi dengan vektor yang ditentukan. Dalam contoh ini, 10 vektor teratas harus memenuhi kondisi kueri berikut: nilai kolom col_keyword adalah 0 dan nilai kolom col_long berkisar antara 0 hingga 50.
def knn_vector_query(client):
filter_query = BoolQuery(
must_queries=[
TermQuery(field_name='col_keyword', column_value="0"),
RangeQuery(field_name='col_long', range_from=0, range_to=50),
]
)
query = KnnVectorQuery(field_name='col_vector', top_k=10, float32_query_vector=[1.0, 1.1, 1.2, -1.3], filter=filter_query)
# Urutkan hasil kueri berdasarkan skor.
sort = Sort(sorters=[ScoreSort(sort_order=SortOrder.DESC)])
search_query = SearchQuery(query, limit=10, get_total_count=False, sort=sort)
search_response = client.search(
table_name='<TABLE_NAME>',
index_name='<SEARCH_INDEX_NAME>',
search_query=search_query,
columns_to_get=ColumnsToGet(column_names=["col_keyword", "col_long"], return_type=ColumnReturnType.SPECIFIED)
)
print("requestId:", search_response.request_id)
# Jika Tablestore SDK untuk Python yang Anda gunakan tidak dapat memperoleh search_hits, gunakan Tablestore SDK untuk Python V6.1.0 atau lebih baru.
for hit in search_response.search_hits:
# Dapatkan data baris.
row = hit.row
print(row)
# Dapatkan skor.
score = hit.score
print(score)FAQ
Bagaimana cara mengoptimalkan performa kueri vektor KNN Tablestore?
Referensi
Saat menggunakan indeks pencarian untuk men-query 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 Boolean, Kueri vektor KNN, kueri bersarang, dan exists query. Metode ini memungkinkan Anda men-query data dari berbagai dimensi sesuai dengan kebutuhan bisnis.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri menggunakan fitur pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan Paging.
Anda dapat menggunakan fitur collapse (distinct) untuk menggabungkan set hasil berdasarkan kolom tertentu, sehingga data dari tipe yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (Distinct).
Untuk menganalisis data dalam tabel, Anda dapat menggunakan fitur agregasi operasi Pencarian atau menjalankan pernyataan SQL, seperti memperoleh nilai minimum, maksimum, jumlah, dan total baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin memperoleh 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.