Full-Text Search — Database

Apa itu Full-Text Search? Full-text search (FTS) memungkinkan pencarian teks yang lebih cerdas daripada LIKE. FTS memahami kata, stemming, dan ranking relevansi

Apa itu Full-Text Search?

Full-text search (FTS) memungkinkan pencarian teks yang lebih cerdas daripada LIKE. FTS memahami kata, stemming, dan ranking relevansi.

LIKE vs Full-Text Search

-- LIKE: sederhana tapi lambat dan terbatas
SELECT * FROM articles WHERE body LIKE '%database%';
-- ❌ Tidak bisa ranking
-- ❌ Tidak memahami "databases", "databased"
-- ❌ Lambat tanpa index (full table scan)

-- Full-text search: cerdas dan cepat
SELECT * FROM articles
WHERE to_tsvector('indonesian', body) @@ to_tsquery('database');
-- ✅ Memahami stemming
-- ✅ Bisa ranking berdasarkan relevansi
-- ✅ Bisa di-index

PostgreSQL Full-Text Search

-- Buat kolom tsvector untuk pencarian cepat
ALTER TABLE articles ADD COLUMN search_vector tsvector;

-- Update search vector
UPDATE articles SET search_vector =
    setweight(to_tsvector('indonesian', coalesce(title, '')), 'A') ||
    setweight(to_tsvector('indonesian', coalesce(body, '')), 'B');

-- Index pada search vector
CREATE INDEX idx_articles_search ON articles USING GIN(search_vector);

-- Query dengan ranking
SELECT title,
       ts_rank(search_vector, query) AS rank
FROM articles,
     to_tsquery('database & design') query
WHERE search_vector @@ query
ORDER BY rank DESC;

Alternatif Full-Text Search

Laravel whereFullText()

Laravel menyediakan method whereFullText() untuk full-text search menggunakan MATCH AGAINST (MySQL) atau tsvector (PostgreSQL):

// Buat fulltext index di migration
$table->fullText(["title", "body"]);

// Query dengan whereFullText
Article::whereFullText(["title", "body"], "database design")->get();

Tips

Yang akan kamu pelajari