22 poin oleh xguru 2024-08-14 | 3 komentar | Bagikan ke WhatsApp

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

  1. 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
  2. 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
  3. 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

  1. 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
  2. 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
  3. 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

  1. Kumpulan fitur yang komprehensif

    • Elasticsearch dapat menangani hampir semua kueri FTS
    • Elastic Query DSL (domain-specific language) adalah standar dalam fungsi pencarian teks lengkap
  2. Performa tinggi

    • Menurut benchmark, Elasticsearch dapat mengueri miliaran baris dalam hitungan milidetik berkat mesin pencari Lucene yang battle-tested sebagai fondasinya dan arsitektur terdistribusi
  3. 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

  1. 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
  2. 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
  3. 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
  4. 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

 
galadbran 2024-08-14

Jadi, ternyata yang dimaksud Postgres FTS adalah fitur bawaan, ya.

 
xguru 2024-08-14

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

 
cometkim 2024-08-14

paradedb, pg_search, dan pg_bm25 yang disebut dalam artikel semuanya adalah proyek yang sama.