Pencarian teks lengkap di Postgres: Elasticsearch vs. alternatif lainnya
(blog.paradedb.com)Pencarian Teks Lengkap (Full Text Search)
- Pencarian teks lengkap adalah teknik untuk menemukan item dalam kumpulan teks berdasarkan ada atau tidaknya kata kunci dan frasa tertentu
- Sebagian besar mesin pencari seperti Elasticsearch menggunakan algoritme BM25 untuk memberi peringkat pada hasil pencarian
- BM25 mempertimbangkan seberapa sering sebuah istilah muncul, dan seberapa unik istilah tersebut di seluruh dokumen
- Pencarian teks lengkap berbeda dari pencarian kemiripan atau pencarian vektor, yang mencari dan memberi peringkat hasil berdasarkan makna semantik
- Banyak aplikasi modern menggabungkan pencarian teks lengkap dan pencarian kemiripan, yang disebut pencarian hibrida, untuk memperoleh hasil yang lebih akurat
Postgres FTS
Kelebihan
-
Kesederhanaan
- Postgres FTS tidak memerlukan infrastruktur tambahan dan dapat digunakan di semua layanan Postgres terkelola seperti AWS RDS
- Dalam jangka panjang, ini dapat menghemat banyak waktu dan pertimbangan karena tidak perlu mengorkestrasi dan mengelola mesin pencari eksternal
-
Pencarian real-time
- Di Postgres FTS, data dapat dicari segera setelah commit
- Ini bisa sangat berguna bagi perusahaan yang membangun pengalaman pencarian untuk pengguna atau pengalaman pencarian yang sensitif terhadap latensi, misalnya situs e-commerce atau fintech
-
Transaksi Postgres dan MVCC
- Transaksi ACID dan multi-version concurrency control (MVCC) di Postgres menjamin keandalan hasil FTS saat ada akses bersamaan dan pembaruan yang sering
Kekurangan
-
Fitur yang belum lengkap
- Kumpulan fitur Postgres FTS yang terbatas bisa menjadi faktor penentu bagi sebagian perusahaan
- Fitur yang belum ada meliputi penilaian BM25, penyesuaian relevansi, tokenizer kustom, faceting, dan lainnya
-
Penurunan performa pada dataset besar
- Postgres FTS bekerja dengan baik pada tabel dengan jutaan baris, tetapi performanya menurun cukup signifikan pada tabel dengan puluhan juta baris
-
Overhead transaksi
- Membuat indeks GIN pada sebuah kolom menambahkan sedikit latensi pada transaksi yang memengaruhi kolom tersebut, biasanya dalam hitungan milidetik
Ringkasan utama
- Postgres FTS ideal untuk pencarian pada tabel kecil hingga menengah yang tidak memerlukan kueri FTS yang canggih
- Arti dari "menengah" dan "canggih" sengaja dibuat samar karena bergantung pada kebutuhan performa
- Untungnya, pengujian dan migrasi ke/dari Postgres FTS sangat mudah
Elasticsearch
Kelebihan
-
Kumpulan fitur yang komprehensif
- Elasticsearch dapat menangani hampir semua kueri FTS
- Elastic Query DSL (domain-specific language) adalah standar dalam fungsi pencarian teks lengkap
-
Performa tinggi
- Menurut benchmark, Elasticsearch dapat mengueri miliaran baris dalam hitungan milidetik berkat mesin pencari Lucene yang battle-tested sebagai fondasinya dan arsitektur terdistribusi
-
Lebih dari sekadar pencarian
- Selain FTS, Elasticsearch juga merupakan mesin kueri analitik, basis data vektor, serta platform keamanan dan observability
- Banyak organisasi menikmati kesederhanaan karena dapat mengonsolidasikan beberapa layanan di dalam Elasticsearch
Kekurangan
-
Bukan data store yang andal
- Ada banyak kasus perusahaan menyesal setelah memutuskan menggunakan Elasticsearch sebagai data store utama
- Ini bukan pendekatan yang disarankan. Elasticsearch tidak memiliki transaksi ACID dan MVCC, sehingga dapat menyebabkan inkonsistensi dan kehilangan data, serta kurang memiliki sifat relasional dan konsistensi real-time, yang membuat banyak kueri basis data menjadi sulit
-
Memerlukan pipeline ETL
- Karena Elasticsearch bukan data store yang andal, organisasi yang menggunakan Postgres biasanya melakukan extract, transform, load (ETL) data dari Postgres ke Elasticsearch
- Kegagalan pipeline ETL dapat menyebabkan berbagai gangguan produksi, sehingga perubahan pada skema Postgres dasar harus dikelola dengan hati-hati agar tidak merusak pipeline
-
Hilangnya kesegaran data
- Pekerjaan ETL memakan waktu dan dijalankan secara berkala
- Data yang sampai ke Elasticsearch sering kali tertinggal beberapa jam dibandingkan Postgres
- Bagi aplikasi yang perlu melakukan pencarian real-time pada tabel Postgres, ini bisa menjadi penghalang besar
-
Biaya
- Cukup mengejutkan mendengar dari berbagai perusahaan bahwa Elasticsearch menjadi pos biaya perangkat lunak terbesar mereka
- Ketika biaya cluster Elasticsearch melonjak, banyak perusahaan beralih dari Elasticsearch Cloud ke self-managed, yang memang menurunkan pengeluaran cloud tetapi memunculkan masalah baru
- Elasticsearch terkenal sangat sulit untuk dioperasikan, dituning, dan dikelola
- Organisasi-organisasi ini akhirnya mempekerjakan engineer yang mahal untuk mengelola cluster Elasticsearch
Ringkasan utama
- Elasticsearch memberikan performa pencarian yang unggul dengan mengorbankan overhead operasional dan kesegaran data
- Elasticsearch direkomendasikan jika alternatif yang lebih ringan tidak memungkinkan atau jika Anda memang berencana menggunakan layanan Elasticsearch lainnya
Mesin pencari alternatif
- Dalam beberapa tahun terakhir, mesin pencari modern seperti Algolia, Meilisearch, dan Typesense telah muncul
- Mesin-mesin ini umumnya digunakan untuk membangun pengalaman pencarian yang berhadapan langsung dengan pengguna
- Pencarian Hacker News juga dibangun di atas Algolia
- Masing-masing layanan memiliki diferensiasi di sisi tertentu, tetapi ada catatan penting bagi developer yang mencari pencarian untuk Postgres
- Tidak satu pun dari solusi ini dibangun khusus untuk Postgres
- Pengguna Postgres kemungkinan akan mengalami masalah serupa dengan yang terjadi pada Elasticsearch saat menggunakan layanan-layanan ini
Apakah yang terbaik dari kedua dunia bisa diwujudkan?
- ParadeDB adalah mesin pencari teks lengkap yang dibangun untuk Postgres
- Berdasarkan ekstensi bernama
pg_search, ParadeDB menanamkan Tantivy, alternatif Lucene berbasis Rust, ke dalam Postgres - Seperti Postgres FTS, ParadeDB terhubung ke basis data Postgres self-managed yang sudah ada tanpa infrastruktur tambahan
- Seperti Elasticsearch, ParadeDB menyediakan fitur-fitur dari mesin pencari teks lengkap tingkat lanjut
- Kompatibilitas dengan layanan Postgres terkelola seperti Amazon RDS akan segera hadir
3 komentar
Jadi, ternyata yang dimaksud Postgres FTS adalah fitur bawaan, ya.
Mereka terus meningkatkan ini sambil memposting tulisan terkait, jadi sudah beberapa kali saya bagikan juga di GeekNews.
ParadeDB - PostgreSQL untuk Search
pg_bm25 - Ekstensi pencarian full-text yang memberikan kualitas setara Elastic di Postgres
paradedb,pg_search, danpg_bm25yang disebut dalam artikel semuanya adalah proyek yang sama.