Ringkasan penelusuran vektor yang difilter di AlloyDB Omni

Pilih versi dokumentasi:

Halaman ini memberikan ringkasan penelusuran vektor terfilter di AlloyDB Omni.

Penelusuran vektor yang difilter terdiri dari vektor kueri dan filter untuk kolom tertentu. AlloyDB Omni menggunakan kemampuan kueri yang canggih dari PostgreSQL, sehingga Anda dapat melakukan penelusuran vektor dan mengkueri data terstruktur dan tidak terstruktur dari satu antarmuka SQL.

Opsi pemfilteran

Pengoptimal kueri AlloyDB Omni memainkan peran penting dalam menentukan strategi pemfilteran yang paling efisien untuk penelusuran vektor Anda.

Untuk memperkirakan biaya berbagai rencana eksekusi, pengoptimal kueri menganalisis kueri Anda dan mempertimbangkan faktor-faktor seperti selektivitas filter, distribusi data, dan ketersediaan indeks.

Berdasarkan estimasi biaya, pengoptimal memilih strategi pemfilteran yang optimal dari berikut ini:

Pra-pemfilteran

Pra-pemfilteran adalah strategi pengoptimalan kueri di mana AlloyDB Omni menggunakan filter Anda untuk menemukan sekelompok kecil item yang cocok dengan kriteria Anda, bukan menelusuri seluruh set data. Kemudian, AlloyDB Omni menjalankan penelusuran vektor pada grup yang lebih kecil tersebut.

Misalnya, jika Anda mencari kemeja biru serupa, AlloyDB Omni akan menemukan semua kemeja biru terlebih dahulu, lalu menelusuri item serupa dalam grup tersebut.

Strategi ini meningkatkan performa karena menjalankan penelusuran kesamaan vektor yang intensif secara komputasi pada set data yang lebih kecil.

Pasca-pemfilteran

Pemfilteran pasca adalah strategi yang digunakan AlloyDB Omni saat filter Anda tidak mempersempit hasil secara signifikan. Alih-alih memfilter terlebih dahulu, AlloyDB Omni memulai dengan menemukan daftar luas item serupa berdasarkan penelusuran vektor Anda. Kemudian, hasil tersebut diperiksa berdasarkan kondisi filter Anda untuk membuat daftar akhir.

Misalnya, jika Anda menelusuri film serupa dan memiliki filter yang sangat luas seperti genre = drama, AlloyDB Omni akan menemukan sekumpulan besar film yang serupa dengan penelusuran Anda terlebih dahulu, lalu memfilternya berdasarkan genre karena sebagian besar film mungkin bergenre drama.

Strategi ini efisien jika Anda memperkirakan banyak hasil yang cocok dengan filter Anda.

Pemfilteran inline

Pemfilteran inline adalah strategi pengoptimalan kueri di mana AlloyDB Omni menggunakan indeks vektor dan indeks sekunder lainnya untuk melakukan penelusuran vektor dan evaluasi filter secara bersamaan. AlloyDB Omni menelusuri indeks vektor untuk menemukan vektor serupa dan juga memeriksa apakah setiap vektor cocok dengan kondisi filter metadata Anda, dengan memanfaatkan indeks seperti B-tree, GIN, atau GiST untuk evaluasi cepat kondisi ini.

Misalnya, jika Anda menelusuri sepatu serupa dan memfilter menurut color = black, pemfilteran inline berarti AlloyDB Omni hanya memeriksa kesamaan sepatu yang sudah berwarna hitam. Cara ini lebih efisien daripada memeriksa kemiripan semua sepatu, lalu memfilter menurut warna, atau memfilter semua sepatu menurut warna, lalu memeriksa kemiripan.

Pemfilteran inline sangat efektif saat filter mempersempit hasil secara moderat.

Memahami paket kueri

Rencana kueri memberikan tampilan komprehensif dari proses eksekusi kueri dan menunjukkan strategi pemfilteran yang dipilih AlloyDB Omni untuk operasi pemindaian vektor di kolom Execution Strategy.

Paket kueri untuk pemfilteran inline

Untuk pemfilteran inline, AlloyDB Omni menggunakan node rencana Pemindaian Kustom, yang juga dikenal sebagai pemindaian vektor, yang mengandalkan node rencana Pemindaian Indeks Bitmap untuk menyediakan bitmap untuk klausa filter.

Pemindaian vektor menghitung jarak hanya untuk baris yang memenuhi kriteria filter.

Kueri berikut menunjukkan pemfilteran inline untuk penelusuran shoes yang difilter menurut color = black

EXPLAIN
SELECT *
FROM products
WHERE color = 'black'
ORDER BY embedding <=> embedding('text-embedding-005', 'shoes')::vector
LIMIT 10;

Paket kueri contoh berikut menggambarkan penelusuran vektor yang dioptimalkan menggunakan pemfilteran inline:

Limit (actual rows=10)
  ->  Custom Scan (vector scan) on products
      Execution Strategy: Bitmap assisted vector Scan on products_embedding_index
      Order By: (embedding <=> '[...]')::vector)
      Limit: 10
      ->  Bitmap Index Scan on products (color_index)
          Index Cond: (color = 'black')

Dalam rencana kueri contoh, Limit (actual rows=10) menunjukkan bahwa kueri menggunakan klausa SQL LIMIT 10; untuk membatasi output. actual rows=10 berarti node ini menampilkan 10 baris selama eksekusi kueri.

Node -> Custom Scan (vector scan) on products mewakili operasi penelusuran vektor. Ini adalah Pemindaian Kustom karena merupakan pemindaian khusus untuk data vektor, dan beroperasi pada tabel products. Contoh rencana kueri untuk pemfilteran inline menampilkan Bitmap assisted vector Scan on products_embedding_index di kolom Strategi Eksekusi, yang menunjukkan bahwa pemindaian vektor menggunakan bitmap untuk membuat daftar singkat baris yang perlu dilakukan penelusuran kesamaannya. Pemindaian indeks bitmap digunakan untuk memfilter data berdasarkan kondisi color = 'black'.

Atribut Order By: (embedding <=> '[...]')::vector menunjukkan bahwa hasil diurutkan berdasarkan kemiripan vektor, yang dihitung menggunakan ekspresi (embedding <=> '[...]')::vector, dengan embedding merujuk ke kolom vektor, <=> merepresentasikan operator tetangga terdekat, [...] adalah vektor kueri, dan ::vector melakukan casting jenis ke jenis data vektor.

Node -> Bitmap Index Scan on products (color_index) merepresentasikan pemindaian indeks bitmap pada colors_index. Pemindaian indeks bitmap memilih baris yang cocok dengan kondisi filter menggunakan bitmap, dan menggunakan color_index untuk pemfilteran.

Atribut Index Cond: (color = 'black') menentukan kondisi filter yang digunakan oleh pemindaian indeks color = 'black' dari klausa WHERE kueri.

Langkah berikutnya