Ruang penulis
← Kembali ke jurnal
PostgreSQL

Pencarian teks penuh sederhana di PostgreSQL

Mulai pencarian teks yang lebih relevan daripada LIKE menggunakan tsvector dan tsquery.

DTim Diary Coding · 01 Sep 2026 · 2 menit baca

Keterbatasan LIKE untuk pencarian

LIKE '%kata%' bekerja untuk pencocokan sederhana, tetapi tidak memahami bentuk kata, tidak bisa mengurutkan berdasarkan relevansi, dan sulit dioptimalkan dengan indeks pada teks panjang.

Menyiapkan kolom pencarian

ALTER TABLE artikel ADD COLUMN pencarian tsvector
    GENERATED ALWAYS AS (to_tsvector('indonesian', judul || ' ' || isi)) STORED;

CREATE INDEX idx_artikel_pencarian ON artikel USING GIN (pencarian);

Kolom pencarian otomatis terisi dari gabungan judul dan isi setiap kali baris berubah, karena memakai GENERATED ALWAYS AS ... STORED.

Menjalankan pencarian

SELECT judul
FROM artikel
WHERE pencarian @@ to_tsquery('indonesian', 'database & indeks')
ORDER BY ts_rank(pencarian, to_tsquery('indonesian', 'database & indeks')) DESC;

to_tsquery menerima operator seperti & (dan), | (atau), dan ! (bukan) untuk menyusun kondisi pencarian. ts_rank memberi skor relevansi yang bisa dipakai untuk mengurutkan hasil.

Konfigurasi bahasa memengaruhi hasil

Konfigurasi indonesian menentukan cara kata dasar dikenali. Kata berimbuhan seperti "pencarian" dan "mencari" bisa dianggap serupa tergantung kamus yang dipakai konfigurasi tersebut.

Kapan butuh solusi lebih lengkap

Untuk kebutuhan pencarian yang lebih kompleks, seperti typo tolerance atau pencarian lintas bahasa dalam skala besar, mesin pencarian khusus seperti Elasticsearch atau Meilisearch biasanya lebih sesuai dibanding full text search bawaan database.

Latihan

Tambahkan bobot berbeda antara judul dan isi artikel memakai setweight, lalu perhatikan bagaimana urutan hasil pencarian berubah.

← Jelajahi catatan lainnya