Ekstensi RUM menambahkan informasi posisi dan timestamp ke indeks pencarian teks lengkap PostgreSQL, sehingga menghilangkan pemindaian heap tambahan yang memperlambat peringkat, pencarian frasa, dan pengurutan berbasis timestamp.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans RDS menjalankan PostgreSQL 10 atau versi yang lebih baru.
Jika instans menjalankan PostgreSQL 14 atau PostgreSQL 15, versi mesin minor-nya adalah 20221030 atau yang lebih baru. Untuk informasi selengkapnya, lihat Perbarui versi mesin minor instans ApsaraDB RDS for PostgreSQL.
Keterbatasan GIN dan solusi RUM
Generalized Inverted Index (GIN) mendukung pencarian teks lengkap menggunakan tipe tsvector dan tsquery, tetapi tidak menyimpan informasi posisi atau timestamp dalam indeksnya. Hal ini menyebabkan tiga masalah kinerja:
| Keterbatasan GIN | Dampak |
|---|---|
| Lokasi kata tidak disimpan | Peringkat memerlukan pemindaian heap tambahan setelah pemindaian indeks untuk mengambil posisi leksem |
| Lokasi kata tidak disimpan | Pencarian frasa memerlukan pemindaian heap tambahan untuk memverifikasi batas frasa |
| Informasi timestamp tidak disimpan | Pengurutan berdasarkan timestamp memerlukan pemindaian heap tambahan karena indeks dengan morfem tidak menyimpan informasi terkait |
RUM mengatasi ketiganya dengan menyimpan lokasi kata dan informasi timestamp langsung di dalam indeks, sehingga tidak diperlukan pemindaian heap tambahan untuk peringkat, pencarian frasa, maupun pengurutan berdasarkan timestamp.
Indeks RUM membutuhkan waktu lebih lama untuk dibuat dan dimasukkan dibandingkan indeks GIN. RUM menghasilkan indeks berdasarkan write-ahead logging (WAL) dan menyimpan lebih banyak informasi per entri dibandingkan GIN.
Aktifkan atau nonaktifkan ekstensi
Aktifkan ekstensi:
CREATE EXTENSION rum;Nonaktifkan ekstensi:
DROP EXTENSION rum;Operator
Ekstensi RUM menyediakan operator-operator berikut:
| Operator | Mengembalikan | Deskripsi |
|---|---|---|
tsvector <=> tsquery | float4 | Mengembalikan jarak antara nilai tsvector dan nilai tsquery. |
timestamp <=> timestamp | float8 | Mengembalikan jarak antara dua timestamp. |
timestamp <=| timestamp | float8 | Mengembalikan jarak hanya ke timestamp sisi kiri. |
timestamp |=> timestamp | float8 | Mengembalikan jarak hanya ke timestamp sisi kanan. |
Tiga operator terakhir juga berfungsi dengan tipe-tipe berikut: timestamptz, int2, int4, int8, float4, float8, money, dan oid.
Referensi
Ekstensi RUM mengikuti metode penggunaan yang sama seperti ekstensi open source-nya. Untuk referensi fungsi lengkap dan contoh tambahan, lihat dokumentasi ekstensi RUM.