6 poin oleh GN⁺ 2023-07-13 | 1 komentar | Bagikan ke WhatsApp
  • PostgreSQL menyediakan komponen untuk membangun mesin pencarinya sendiri
  • Komponen utamanya adalah tipe data tsvector dan tsquery, operator pencocokan @@, fungsi pemeringkatan hasil kecocokan, dan tipe indeks GIN
  • tsvector menyimpan kosakata yang telah dinormalisasi beserta posisinya dalam teks asli
  • tsquery merepresentasikan kueri yang telah dinormalisasi dan dapat menggabungkan beberapa istilah menggunakan operator logis
  • Tipe indeks GIN digunakan untuk kueri tsvector yang efisien
  • ts_rank dan ts_rank_cd adalah fungsi pemeringkatan yang mempertimbangkan frekuensi istilah dan kedekatan
  • Melalui penyesuaian relevansi, hasil pencarian dapat dikustomisasi berdasarkan kriteria tertentu
  • Booster untuk angka, tanggal, dan nilai yang persis sama dapat ditambahkan ke skor peringkat
  • Bobot kolom dapat ditetapkan untuk memprioritaskan istilah tertentu dalam hasil pencarian
  • Menggunakan setweight pada kolom judul meningkatkan peringkat judul film yang berisi kata "jedi"
  • PostgreSQL tidak secara langsung mendukung pencarian fuzzy atau toleransi salah ketik, tetapi hal itu dapat diimplementasikan menggunakan kemiripan atau jarak Levenshtein
  • Pencarian faset, yang membantu pengguna mempersempit cakupan pencarian, dapat diimplementasikan di PostgreSQL menggunakan definisi kategori atau algoritme
  • Artikel ini ditutup dengan menyebutkan bahwa perbandingan rinci dengan Elasticsearch akan dibahas pada bagian 2

1 komentar

 
GN⁺ 2023-07-13
Opini Hacker News
  • Menantikan bagian kedua yang membandingkan PostgreSQL dan Elasticsearch.
  • Saya meremehkan upaya untuk menyinkronkan PostgreSQL dan Elasticsearch demi CRUD dan pencarian.
  • Mesin pencari membutuhkan kecepatan pencarian yang tinggi. Ini bukan sekadar hal yang penting secara teori.
  • Dengan algoritme CS dasar dan pemanfaatan perangkat keras, kita bisa dengan mudah membuat database dasar dan mesin pencari.
  • Sifat pencarian yang subjektif adalah tantangan terbesar.
  • Postgres dapat digabungkan dengan pgvector untuk menemukan konten yang relevan melalui embedding.
  • Pencarian internal Postgres membebani CPU, dan pembaruan transaksi harus diprioritaskan.
  • Klaster ES dan Solr berjalan dengan penggunaan CPU tinggi selama reindexing.
  • Ekstensi PG untuk pencarian, recursive join, dan vektor menyenangkan dan sederhana untuk side project.
  • SQLite juga menawarkan fitur indexing lanjutan dan stemming.
  • Logika bisnis diabstraksikan ke database, tetapi trade-off-nya tidak disebutkan.
  • Saya sedang mempertimbangkan menjalankan mesin pencari kustom untuk situs tertentu yang saya bookmark.
  • Ada rasa penasaran apakah sebaiknya memilih Postgres/Elasticsearch atau solusi komersial.
  • Kata "advanced" dianggap sebagai indikator yang positif.