全部产品
Search
文档中心

Tablestore:Kueri vektor KNN dari indeks pencarian

更新时间:Jul 02, 2025

Anda dapat menggunakan fitur kueri vektor tetangga terdekat (KNN) untuk melakukan pencarian tetangga terdekat berdasarkan vektor. Dengan cara ini, Anda dapat menemukan item data yang memiliki kemiripan tertinggi dengan vektor yang ingin Anda kueri dalam dataset berskala besar. Fitur ini cocok untuk berbagai skenario seperti sistem rekomendasi, pengambilan gambar dan video, pemrosesan bahasa alami (NLP), dan pencarian semantik.

Catatan

Untuk informasi lebih lanjut tentang fitur kueri vektor KNN, lihat Ikhtisar.

Catatan penggunaan

  • Untuk menggunakan fitur kueri vektor KNN, tipe kolom tempat bidang Vektor dipetakan di tabel data harus String. Saat membuat indeks pencarian, Anda harus mengatur tipe bidang tempat kolom String dipetakan ke Vektor. Kemudian, tentukan jumlah dimensi dan tipe data dari bidang Vektor, serta algoritma yang ingin Anda gunakan untuk mengukur jarak antara vektor.

  • Untuk menjalankan pernyataan SQL guna menggunakan fitur kueri vektor KNN, Anda harus membuat tabel pemetaan untuk indeks pencarian yang dibuat untuk tabel data. Untuk informasi tentang cara membuat tabel pemetaan untuk indeks pencarian, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.

Pemetaan tipe data

Tipe data dalam tabel

Tipe data dalam indeks pencarian

Data SQL dalam SQL

String

Tipe Vektor. Jumlah dimensi dan tipe data dari bidang Vektor serta algoritma yang digunakan untuk mengukur jarak antara vektor ditentukan.

VARCHAR (kunci utama)

MEDIUMTEXT (kolom yang telah ditentukan sebelumnya)

Buat tabel pemetaan untuk indeks pencarian

Jika Anda menjalankan pernyataan CREATE TABLE untuk membuat tabel pemetaan untuk indeks pencarian, metode yang digunakan untuk membuat bidang Vektor sama dengan metode yang digunakan untuk membuat bidang tipe lainnya. Anda hanya perlu menentukan nama dan tipe data yang valid untuk bidang Vektor. Saat membuat tabel pemetaan untuk indeks pencarian, kami sarankan Anda menentukan tipe MEDIUMTEXT sebagai tipe data yang dipetakan dalam SQL untuk bidang tipe Vektor.

Contoh pernyataan SQL berikut memberikan contoh cara membuat tabel pemetaan untuk indeks pencarian yang berisi bidang tipe Vektor:

CREATE TABLE `test_table__test_table_index`(
    `col_vector` MEDIUMTEXT
) 
ENGINE='searchindex'
ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';

Lakukan kueri vektor KNN

VECTOR_QUERY_FLOAT32

Anda dapat menggunakan fungsi VECTOR_QUERY_FLOAT32 untuk melakukan pencarian tetangga terdekat berdasarkan vektor.

  • Ekspresi SQL

    VECTOR_QUERY_FLOAT32(fieldName, float32QueryVector,topk, filter)
  • Parameter

    Parameter

    Tipe

    Diperlukan

    Deskripsi

    fieldName

    string

    Ya

    Nama bidang yang ingin Anda cocokkan. Untuk melakukan kueri vektor KNN, tipe bidang harus Vektor dalam indeks pencarian.

    float32QueryVector

    string

    Ya

    Vektor yang ingin Anda kueri kesamaannya.

    Penting

    Jumlah dimensi harus sesuai dengan jumlah dimensi dari bidang Vektor dalam indeks pencarian.

    topK

    int

    Ya

    Hasil kueri top K yang memiliki kesamaan tertinggi dengan vektor yang ingin Anda kueri. Untuk informasi tentang nilai maksimum parameter topK, lihat Batas indeks pencarian.

    Penting
    • Nilai K yang lebih tinggi menunjukkan laju recall yang lebih tinggi, latensi kueri, dan biaya yang lebih tinggi.

    • Jika nilai parameter topK kurang dari nilai parameter limit dalam pernyataan SQL, server secara otomatis menggunakan nilai parameter limit sebagai nilai parameter topK.

    filter

    string

    Tidak

    Filter. Anda dapat menggunakan kombinasi kondisi kueri yang bukan merupakan kondisi kueri vektor KNN.

  • Contoh

    Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 10 nilai teratas di kolom col_vector tabel exampletable yang memiliki kesamaan tertinggi dengan [1.5, -1.5, 2.5, -2.5]:

    SELECT * FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 10) limit 10;

SCORE()

Anda dapat menggunakan fungsi SCORE() untuk mengkueri skor relevansi hasil kueri. Skor yang lebih tinggi menunjukkan kesamaan yang lebih tinggi.

  • Ekspresi SQL

    SCORE()
  • Contoh

    Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 10 nilai teratas di kolom col_vector tabel exampletable yang memiliki kesamaan tertinggi dengan [1.5, -1.5, 2.5, -2.5] dan menampilkan skor relevansi hasil kueri:

    SELECT *,SCORE() FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 10) limit 10;

Kombinasi kueri vektor KNN dan kondisi kueri lainnya

Anda dapat menggunakan kueri vektor KNN dan kondisi kueri lainnya dalam berbagai kombinasi. Efek kueri bervariasi berdasarkan kombinasi yang digunakan. Dalam contoh pada bagian ini, sejumlah kecil data memenuhi kondisi filter.

Dalam contoh ini, 100 juta gambar disimpan dalam sebuah tabel dan 50.000 gambar milik Pengguna A. Di antara 50.000 gambar tersebut, 50 disimpan pada tahun 2024. Pengguna A ingin mencari 10 gambar yang memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 50 gambar tersebut.

  • Saat pernyataan SQL sampel berikut dieksekusi, filter digunakan untuk mendapatkan semua gambar Pengguna A yang disimpan pada tahun 2024, total 50 gambar. Kemudian, 10 gambar teratas yang memiliki kesamaan tertinggi dengan gambar yang ingin dikueri oleh Pengguna A di antara 50 gambar tersebut ditemukan dan dikembalikan kepada Pengguna A. Skor relevansi masing-masing dari 10 gambar tersebut ditampilkan.

    SELECT *,SCORE() FROM exampletable WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 100, user="a" and year_num=2024) limit 10;
  • Saat pernyataan SQL sampel berikut dieksekusi, 500 gambar teratas yang memiliki kesamaan tertinggi dengan gambar yang ingin dikueri oleh Pengguna A di antara 100 juta gambar dikembalikan. Kemudian, 10 gambar milik Pengguna A yang disimpan pada tahun 2024 dan memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 500 gambar tersebut ditemukan dan dikembalikan kepada Pengguna A dan skor relevansi masing-masing dari 10 gambar tersebut ditampilkan. Gambar teratas 500 mungkin tidak termasuk semua 50 gambar milik Pengguna A yang disimpan pada tahun 2024. Saat pernyataan SQL sampel ini dieksekusi, Pengguna A mungkin gagal mendapatkan 10 gambar yang memiliki kesamaan tertinggi dengan gambar yang ditentukan di antara 50 gambar tersebut. Dalam kasus ekstrem, Pengguna A mungkin tidak mendapatkan gambar apa pun.

    SELECT *,SCORE() FROM exampletable WHERE user="a" and year_num=2024 and VECTOR_QUERY_FLOAT32(col_vector, "[1.5, -1.5, 2.5, -2.5]", 500) limit 10;

Prosedur

Dalam contoh ini, tabel data bernama vector_query_table digunakan. Tabel data terdiri dari kolom kunci utama pk bertipe String, kolom atribut col_vector bertipe String, dan kolom atribut col_keyword bertipe String.

Untuk melakukan kueri vektor KNN dalam SQL, buat indeks pencarian untuk tabel data, buat tabel pemetaan untuk indeks pencarian, lalu jalankan pernyataan SQL. Prosedur:

  1. Buat indeks pencarian dan konfigurasikan bidang Vektor. Untuk informasi lebih lanjut, lihat Gunakan Indeks Pencarian di Konsol Tablestore dan Gunakan SDK Tablestore.

    Catatan

    Jika tidak ada bidang Vektor yang ditentukan dalam indeks pencarian yang ingin Anda gunakan, Anda dapat memodifikasi skema indeks pencarian untuk mengonfigurasi bidang Vektor. Untuk informasi lebih lanjut, lihat Modifikasi Dinamis Skema Indeks Pencarian.

    • Gambar berikut menunjukkan cara membuat indeks pencarian di Konsol Tablestore.

      Dalam contoh ini, indeks pencarian bernama vector_query_table_index dibuat. Indeks pencarian terdiri dari bidang col_vector bertipe Vektor dan bidang col_keyword bertipe String. Bidang col_vector bertipe Vektor dipetakan ke kolom col_vector bertipe String dalam tabel data.

      image

    • Gambar berikut menunjukkan skema indeks pencarian.

      image

  2. Buat tabel pemetaan untuk indeks pencarian. Untuk informasi lebih lanjut, lihat Gunakan Fitur Kueri SQL di Konsol Tablestore dan Gunakan SDK Tablestore untuk Menggunakan Fitur Kueri SQL.

    1. Dalam contoh ini, tabel pemetaan bernama vector_query_table__vector_query_table_index dibuat untuk indeks pencarian. Tipe data dari bidang tempat bidang Vektor bernama col_vector dalam tabel pemetaan dipetakan adalah MEDIUMTEXT dalam SQL. Untuk informasi lebih lanjut, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.

      Anda dapat menjalankan pernyataan SQL sampel berikut untuk membuat tabel pemetaan:

      CREATE TABLE `vector_query_table__vector_query_table_index`(
          `col_vector` MEDIUMTEXT,
          `col_keyword` MEDIUMTEXT
      )
      ENGINE='searchindex',
      ENGINE_ATTRIBUTE='{"index_name":"vector_query_table_index","table_name":"vector_query_table"}';
    2. (Opsional) Setelah Anda membuat tabel pemetaan untuk indeks pencarian, Anda dapat melakukan operasi berikut berdasarkan kebutuhan bisnis Anda.

      Kueri informasi tentang tabel

      Jalankan pernyataan SQL berikut untuk mengkueri informasi tentang tabel pemetaan untuk indeks pencarian:

      DESCRIBE vector_query_table__vector_query_table_index;

      Gambar berikut menunjukkan hasil kueri.

      image

      Kueri data dalam tabel

      Jalankan pernyataan SQL berikut untuk mengkueri data dalam tabel pemetaan untuk indeks pencarian:

      SELECT * FROM vector_query_table__vector_query_table_index;

      Gambar berikut menunjukkan hasil kueri. Sebagai contoh, tabel pemetaan vector_query_table__vector_query_table_index untuk indeks pencarian berisi 10 baris data.

      image

  3. Lakukan kueri vektor KNN untuk mengkueri data. Untuk informasi lebih lanjut, lihat Kueri Data.

    Contoh pernyataan SQL berikut memberikan contoh cara mengkueri 5 nilai teratas di kolom col_vector yang memiliki kesamaan tertinggi dengan [1.5, 2.0, 2.5, 1.7] dan menampilkan skor relevansi hasil kueri:

    SELECT *,SCORE() FROM vector_query_table__vector_query_table_index WHERE VECTOR_QUERY_FLOAT32(col_vector, "[1.5, 2.0, 2.5, 1.7]", 5) limit 5;

    Gambar berikut menunjukkan hasil kueri.

    image

Batasan

  • Anda hanya dapat menggunakan fungsi VECTOR_QUERY_FLOAT32 saat mengkueri data menggunakan tabel pemetaan yang dibuat untuk indeks pencarian.

  • Saat menggunakan fungsi VECTOR_QUERY_FLOAT32, Anda harus menggunakan klausa LIMIT. Anda tidak dapat menggunakan klausa HAVING.

  • Fungsi VECTOR_QUERY_FLOAT32 hanya dapat digunakan sebagai klausa WHERE dari pernyataan SELECT tetapi tidak dapat digunakan sebagai ekspresi kolom pernyataan SELECT, sebagai fungsi agregat, atau untuk pengelompokan atau pengurutan.

  • Anda harus menggunakan fungsi SCORE() bersama dengan fungsi VECTOR_QUERY_FLOAT32. Anda tidak dapat menggunakan fungsi SCORE() secara terpisah.

  • Fungsi SCORE() hanya dapat digunakan sebagai ekspresi kolom pernyataan SELECT. Fungsi ini tidak dapat digunakan sebagai klausa WHERE dari pernyataan SELECT, sebagai fungsi agregasi, atau untuk pengurutan.