Topik ini menjelaskan cara menggunakan ekstensi RUM dari ApsaraDB RDS for PostgreSQL untuk menjalankan pencarian teks penuh.
Prasyarat
Instans RDS menjalankan PostgreSQL 10 atau yang lebih baru.
Jika instans RDS menjalankan PostgreSQL 14 atau PostgreSQL 15, versi mesin minor dari instans RDS harus 20221030 atau yang lebih baru. Untuk informasi lebih lanjut tentang cara melihat dan memperbarui versi mesin minor instans RDS Anda, lihat Perbarui Versi Mesin Minor Instans ApsaraDB RDS for PostgreSQL.
Informasi latar belakang
Generalized Inverted Index (GIN) memungkinkan Anda menjalankan pencarian teks penuh dengan menggunakan tipe data tsvector dan tsquery. Namun, pendekatan ini dapat menimbulkan beberapa masalah berikut:
Pengurutan Lambat
ApsaraDB RDS for PostgreSQL hanya dapat mengurutkan kata-kata setelah mendapatkan lokasi kata-kata tersebut. Namun, GIN tidak menyimpan lokasi kata. Setelah ApsaraDB RDS for PostgreSQL menjalankan pemindaian berdasarkan indeks GIN, sistem harus melakukan pemindaian tambahan untuk mengambil lokasi kata.
Kueri Lambat untuk Frasa
ApsaraDB RDS for PostgreSQL hanya dapat mencari frasa berdasarkan indeks GIN setelah mendapatkan lokasi frasa tersebut.
Pengurutan Timestamp Lambat
GIN tidak menyimpan informasi terkait dalam indeks yang berisi morfem. Oleh karena itu, diperlukan pemindaian tambahan.
Ekstensi RUM dirancang berdasarkan GIN. Ekstensi ini memungkinkan Anda menyimpan lokasi kata atau timestamp di indeks RUM.
Namun, ekstensi RUM memerlukan waktu lebih lama daripada GIN untuk membangun dan menyisipkan indeks. Hal ini disebabkan oleh ekstensi RUM yang menghasilkan indeks berdasarkan write-ahead logging (WAL) log, serta indeks RUM yang dihasilkan berisi lebih banyak informasi dibandingkan kunci yang digunakan untuk enkripsi.
Aktifkan atau nonaktifkan ekstensi
Aktifkan Ekstensi
CREATE EXTENSION rum;Nonaktifkan Ekstensi
DROP EXTENSION rum;
Operator universal
Tabel berikut menjelaskan operator yang disediakan oleh ekstensi RUM.
Operator | Tipe data | Deskripsi |
tsvector <=> tsquery | float4 | Mengembalikan jarak antara objek data tipe tsvector dan objek data tipe tsquery. |
timestamp <=> timestamp | float8 | Mengembalikan jarak antara dua timestamp. |
timestamp <=| timestamp | float8 | Mengembalikan hanya jarak ke timestamp sisi kiri. |
timestamp |=> timestamp | float8 | Mengembalikan hanya jarak ke timestamp sisi kanan. |
Tiga operator terakhir juga didukung untuk tipe data berikut: timestamptz, int2, int4, int8, float4, float8, money, dan oid.
Untuk informasi lebih lanjut tentang fungsi-fungsi yang disediakan oleh ekstensi RUM, kunjungi situs resmi.
Referensi
Metode penggunaan ekstensi RUM sama dengan metode penggunaan ekstensi open source. Untuk informasi lebih lanjut, lihat dokumentasi resmi.