Praktik terbaik pengindeksan vektor

Halaman ini menjelaskan praktik terbaik pengindeksan vektor yang mengoptimalkan indeks vektor dan meningkatkan hasil kueri tetangga terdekat (ANN) perkiraan.

Menyesuaikan opsi penelusuran vektor

Nilai paling optimal untuk opsi indeks vektor Anda bergantung pada kasus penggunaan, set data vektor, dan vektor kueri Anda. Anda dapat menetapkan dan menyesuaikan nilai ini dengan membuat indeks vektor baru dan menetapkan index_option_list dalam pernyataan CREATE VECTOR INDEX. Anda mungkin perlu melakukan penyesuaian iteratif untuk menemukan nilai terbaik untuk workload spesifik Anda.

Berikut beberapa panduan berguna yang harus diikuti saat memilih nilai yang sesuai:

  • tree_depth (tingkat hierarki): Jika tabel yang Anda indeks memiliki kurang dari 10 juta baris, gunakan tree_depth 2. Jika tidak, tree_depth dari 3 mendukung tabel hingga sekitar 10 miliar baris.

  • num_leaves: Gunakan akar kuadrat dari jumlah baris dalam set data. Nilai yang lebih besar dapat meningkatkan waktu pembuatan indeks vektor. Hindari menyetel num_leaves yang lebih besar dari table_row_count dibagi 1000 karena akan menghasilkan daun yang terlalu kecil dan performa yang buruk.

  • num_leaves_to_search: Opsi ini menentukan jumlah node daun indeks yang ditelusuri. Meningkatkan num_leaves_to_search akan meningkatkan perolehan, tetapi juga meningkatkan latensi dan biaya. Sebaiknya gunakan angka yang 1% dari total jumlah daun yang ditentukan dalam pernyataan CREATE VECTOR INDEX sebagai nilai untuk num_leaves_to_search. Jika Anda menggunakan klausa filter, tingkatkan nilai ini untuk memperluas penelusuran.

Jika perolehan yang dapat diterima tercapai, tetapi biaya kueri terlalu tinggi, sehingga menghasilkan QPS maksimum yang rendah, coba tingkatkan num_leaves dengan mengikuti langkah-langkah berikut:

  1. Tetapkan num_leaves ke beberapa kelipatan k dari nilai aslinya (misalnya, 2 * sqrt(table_row_count)).
  2. Tetapkan num_leaves_to_search agar sama dengan kelipatan k dari nilai aslinya.
  3. Lakukan eksperimen dengan mengurangi num_leaves_to_search untuk meningkatkan biaya dan QPS sekaligus mempertahankan recall.

Meningkatkan perolehan

Untuk meningkatkan perolehan, pertimbangkan untuk menyesuaikan nilai num_leaves_to_search atau membangun ulang indeks vektor Anda.

Jika nilai num_leaves_to_search terlalu kecil, Anda mungkin akan kesulitan menemukan tetangga terdekat untuk beberapa vektor kueri. Membuat indeks vektor baru dengan nilai num_leaves_to_search yang lebih tinggi dapat membantu meningkatkan perolehan dengan menelusuri lebih banyak leaf. Kueri terbaru mungkin berisi lebih banyak vektor yang sulit ini.

Membangun ulang indeks vektor

Struktur pohon indeks vektor dioptimalkan untuk set data pada saat pembuatan, dan bersifat statis setelahnya. Oleh karena itu, jika vektor yang sangat berbeda ditambahkan setelah membuat indeks vektor awal, struktur hierarki mungkin tidak optimal, sehingga menyebabkan perolehan yang lebih buruk.

Untuk membangun ulang indeks vektor tanpa periode nonaktif:

  1. Buat indeks vektor baru pada kolom embedding yang sama dengan indeks vektor saat ini, dengan memperbarui parameter (misalnya, OPTIONS) sebagaimana mestinya. Setelah pembuatan indeks selesai, Anda dapat mempertimbangkan untuk mengevaluasi indeks mana dari kedua indeks Anda yang berperforma lebih baik. Jika ya, lanjutkan ke langkah berikutnya. Jika tidak, lanjutkan dengan menghapus indeks vektor yang sudah tidak berlaku.
  2. Spanner secara otomatis memutuskan indeks mana yang akan digunakan dalam eksekusi kueri. Spanner menyediakan dua cara yang memungkinkan Anda menentukan indeks yang akan digunakan. Pilih salah satu metode berikut untuk mengevaluasi dan membandingkan indeks Anda:

    a. Ubah aplikasi Anda: Anda dapat memperbarui beberapa subset kueri sehingga menggunakan hint FORCE_INDEX untuk menunjuk ke indeks baru guna memperbarui kueri penelusuran vektor. Hal ini memastikan bahwa kueri menggunakan indeks vektor baru. Dengan menggunakan metode ini, Anda mungkin perlu menyetel ulang num_leaves_to_search dalam kueri baru.

    b. Ubah skema Anda: Anda dapat menyetel opsi disable_search pada salah satu indeks vektor Anda. Jika disetel ke true, Spanner akan menonaktifkan indeks vektor. Anda dapat melakukannya dengan menjalankan pernyataan perubahan skema ALTER VECTOR INDEX:

      ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);
    

    Metode ini mencegah Spanner menggunakan indeks vektor ini di database Anda. Jika Anda memiliki dua indeks dan menyetel opsi ini di indeks yang lebih lama, semua kueri akan menggunakan indeks baru setelah perubahan skema diterapkan. Jika Anda menggunakan petunjuk FORCE_INDEX untuk menentukan indeks vektor yang memiliki opsi disable_search yang ditetapkan ke true, kueri akan gagal.

  3. Hapus indeks vektor yang sudah tidak berlaku.

Langkah berikutnya