Halaman ini menjelaskan cara menggunakan embedding tersimpan untuk membuat indeks dan mengkueri
embedding menggunakan indeks IVFFlat
dengan AlloyDB untuk PostgreSQL.
Untuk mengetahui informasi selengkapnya tentang 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
vector
versi0.5.0
atau yang lebih baru yang didasarkan padapgvector
, yang diperluas oleh Google untuk AlloyDB, telah diinstal.CREATE EXTENSION IF NOT EXISTS vector;
Membuat indeks IVFFlat
pgvector
stok juga menyediakan versi indeks IVF
yang bernama
IVFFlat
yang memberikan waktu build yang lebih cepat dan memiliki jejak memori yang lebih kecil dibandingkan dengan indeks hnsw
.
Untuk membuat indeks IVFFlat
, selesaikan langkah-langkah berikut:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Ganti kode berikut:
INDEX_NAME
: nama indeks yang ingin Anda buat—misalnya,my-ivf-index
.TABLE
: tabel yang akan ditambahkan indeksnya.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_ops
Produk dalam:
vector_ip_ops
Jarak 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 IVFFlat.Untuk membuat indeks ini pada kolom sematan yang menggunakan jenis data
real[]
, bukanvector
, transmisikan kolom ke jenis datavector
:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Ganti DIMENSIONS
dengan lebar dimensi kolom
penyematan. 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.
Untuk menyesuaikan indeks Anda agar mendapatkan keseimbangan QPS dan perolehan target, lihat Menyesuaikan indeks
IVFFlat
.
Menjalankan kueri
Setelah menyimpan dan mengindeks sematan di database, Anda dapat mulai
membuat kueri menggunakan fungsi kueri pgvector
.
Untuk menemukan tetangga semantik terdekat untuk vektor embedding, Anda dapat menjalankan contoh kueri berikut, dengan 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.INDEX_NAME
: nama indeks yang ingin Anda gunakan—misalnya,my-scann-index
.EMBEDDING_COLUMN
: kolom yang berisi embedding yang disimpan.DISTANCE_FUNCTION_QUERY
: fungsi jarak yang akan digunakan dengan kueri ini. Pilih salah satu 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 terdekatnya yang tersimpan.ROW_COUNT
: jumlah baris yang akan ditampilkan.Tentukan
1
jika 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 ke dalam 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 melakukan transmisi eksplisit panggilan
embedding()
ke vector
agar dapat 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 pintar dengan AlloyDB, pgvector, dan pengelolaan endpoint model.