Indeks Inverted File (IVF) di AlloyDB untuk PostgreSQL memungkinkan Anda mempercepat penelusuran kesamaan vektor pada embedding tersimpan berdimensi tinggi menggunakan kuantisasi skalar. Anda dapat membuat indeks IVF dengan ekstensi vector untuk
mengurangi penggunaan memori dan mempercepat kueri untuk vektor dengan dimensi hingga 8.000. Untuk mengetahui informasi selengkapnya tentang cara menyimpan embedding, lihat
Menyimpan embedding vektor.
Sebelum memulai
Sebelum dapat mulai membuat indeks, Anda harus menyelesaikan prasyarat berikut.
Vektor embedding ditambahkan ke tabel di database AlloyDB Anda.
Ekstensi
vectorversi0.5.0atau yang lebih baru yang didasarkan padapgvector, yang diperluas oleh Google untuk AlloyDB telah diinstal.CREATE EXTENSION IF NOT EXISTS vector;
Membuat indeks IVF
pgvector standar mendukung penelusuran perkiraan tetangga terdekat melalui pengindeksan. AlloyDB menambahkan dukungan ini dengan fitur kuantisasi skalar yang dapat Anda tentukan saat membuat indeks.
Jika diaktifkan, kuantisasi skalar dapat mempercepat kueri yang memiliki vektor dimensi lebih besar secara signifikan, dan memungkinkan Anda menyimpan vektor dengan dimensi hingga 8.000.
Untuk mengaktifkan kuantisasi skalar pada indeks berbasis pgvector, tentukan IVF
sebagai metode indeks, dan SQ8 sebagai kuantizer:
CREATE INDEX INDEX_NAME ON TABLE
USING ivf (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'QUANTIZER');
Ganti kode berikut:
INDEX_NAME: nama indeks yang ingin Anda buat—misalnya,my-ivf-index. Nama indeks dibagikan di seluruh database Anda. Pastikan setiap nama indeks bersifat unik untuk setiap tabel dalam database Anda.TABLE: tabel yang akan ditambahi indeks.EMBEDDING_COLUMN: kolom yang menyimpan datavector.DISTANCE_FUNCTION: fungsi jarak yang akan digunakan dengan indeks ini. Pilih salah satu opsi berikut:Jarak L2:
vector_l2_opsProduk dalam:
vector_ip_opsJarak kosinus:
vector_cosine_ops
LIST_COUNT: jumlah daftar yang akan digunakan dengan indeks ini. Untuk mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeks IVF.QUANTIZER: jenis quantizer yang ingin Anda gunakan.Tetapkan ke salah satu opsi berikut:
SQ8: Direkomendasikan. Respons kueri yang lebih cepat dan mendukung vektor dengan dimensi hingga 8.000, tetapi mengakibatkan beberapa kehilangan perolehan, yang tidak memengaruhi skenario produksi.FLAT: respons kueri yang lebih lambat, penggunaan memori yang lebih tinggi, dan mendukung vektor dengan dimensi hingga 2.000, tetapi dapat mencapai kehilangan perolehan yang dapat diabaikan.
Untuk membuat indeks ini pada kolom embedding yang menggunakan jenis data
real[], bukanvector, transmisikan kolom ke jenis datavector:
CREATE INDEX INDEX_NAME ON TABLE
USING ivf ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS))) DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'SQ8');
Ganti DIMENSIONS dengan lebar dimensi kolom embedding. Untuk mengetahui informasi selengkapnya tentang cara menemukan dimensi,
lihat fungsi vector_dims di Fungsi
vektor.
Untuk melihat progres pengindeksan, gunakan tampilan pg_stat_progress_create_index:
SELECT * FROM pg_stat_progress_create_index;
Kolom phase menampilkan status pembuatan indeks Anda saat ini, dan fase building postings menunjukkan bahwa pembuatan indeks hampir selesai.
Untuk menyesuaikan indeks Anda agar mencapai keseimbangan antara perolehan target dan QPS, lihat Menyesuaikan indeks IVF.
Menjalankan kueri
Setelah menyimpan dan mengindeks embedding dalam database, Anda dapat mulai membuat kueri menggunakan fungsi kueri pgvector.
Untuk menemukan tetangga semantik terdekat untuk vektor embedding, Anda dapat menjalankan contoh kueri berikut, tempat Anda menetapkan fungsi jarak yang sama dengan yang Anda gunakan selama pembuatan indeks.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY 'EMBEDDING'
LIMIT ROW_COUNT;
Ganti kode berikut:
TABLE: tabel yang berisi embedding untuk membandingkan teks.EMBEDDING_COLUMN: kolom yang berisi embedding yang disimpan.DISTANCE_FUNCTION_QUERY: fungsi jarak yang akan digunakan dengan kueri ini. Pilih salah satu dari opsi berikut berdasarkan fungsi jarak yang digunakan saat membuat indeks:Jarak L2:
<->Produk dalam:
<#>Jarak kosinus:
<=>
EMBEDDING: vektor embedding yang ingin Anda temukan tetangga semantik tersimpan terdekatnya.ROW_COUNT: jumlah baris yang akan ditampilkan.Tentukan
1jika Anda hanya menginginkan satu kecocokan terbaik.
Untuk mengetahui informasi selengkapnya tentang contoh kueri lainnya, lihat Membuat kueri.
Anda juga dapat menggunakan fungsi embedding() untuk menerjemahkan teks menjadi vektor. Anda menerapkan vektor ke salah satu operator tetangga terdekat pgvector, <-> untuk jarak L2, guna menemukan baris database dengan embedding yang paling mirip secara semantik.
Karena embedding() menampilkan array real, Anda harus secara eksplisit mentransmisikan panggilan embedding() ke vector untuk menggunakan nilai ini dengan operator pgvector.
Langkah berikutnya
- Membuat indeks ScaNN
- Menjalankan penelusuran kemiripan vektor
- Menyesuaikan performa kueri vektor
- Metrik indeks vektor
- Pelajari cara membuat asisten belanja cerdas dengan AlloyDB, pgvector, dan pengelolaan endpoint model.