Bir uygulamaya arama özelliği eklemeniz gerekiyor. LIKE sorgusu, PostgreSQL full-text search ve Elasticsearch arasında nasıl seçim yaparsınız?

Cevap

Seçim veri hacmi, arama kalitesi ihtiyacı (yazım hatası toleransı, ilgililik sıralaması, facet) ve operasyon maliyetine göre yapılır. Çoğu ürün için PostgreSQL full-text search iyi bir başlangıçtır; ihtiyaç büyüyünce ayrı bir arama motoruna geçilir.

YöntemArtıEksiUygun durum
LIKE '%kelime%'Basit, ek altyapı yokIndex kullanamaz, büyük tabloda yavaş, sıralama yokKüçük tablolar, admin paneli
PostgreSQL FTS (tsvector)Index'li, kök bulma, sıralama, ek servis yokFuzzy ve facet sınırlı, karmaşık ilgililik zorOrta ölçek, tek DB
pg_trgmBenzerlik ve yazım hatası toleransı, ILIKE hızlanırBüyük metinlerde index büyükİsim, ürün adı araması
Elasticsearch / OpenSearchFuzzy, facet, ilgililik, ölçekAyrı küme, senkronizasyon, operasyon yüküBüyük katalog, e-ticaret, log arama
Meilisearch / TypesenseKurulumu kolay, typo toleransıÇok büyük veri ve karmaşık sorgularda sınırlıSite içi arama, orta ölçek

PostgreSQL FTS örneği

ALTER TABLE products ADD COLUMN search tsvector
  GENERATED ALWAYS AS (to_tsvector('turkish', coalesce(name,'') || ' ' || coalesce(description,''))) STORED;
CREATE INDEX products_search_idx ON products USING GIN (search);

SELECT id, name, ts_rank(search, q) AS rank
FROM products, websearch_to_tsquery('turkish', 'kablosuz kulaklık') q
WHERE search @@ q
ORDER BY rank DESC LIMIT 20;

Ayrı arama motoru kullanılırsa

  • Kaynak veri (source of truth) yine veritabanıdır; arama indeksi türetilmiş bir kopyadır.
  • Senkronizasyon: uygulama içinden çift yazma (basit ama tutarsızlık riski), outbox + kuyruk veya CDC (Debezium) ile değişikliklerin indekse akması.
  • İndeks tamamen yeniden oluşturulabilir olmalı (yeni mapping için alias ile sıfır kesintili reindex).
  • Yetki kontrolü: arama sonuçları kullanıcının göremeyeceği kayıtları içermemeli; tenant/izin filtresi sorguya eklenmeli.
  1. Dikey ve yatay ölçekleme arasındaki fark nedir?KolaySistem TasarımıFull Stack
  2. Hangi cache stratejilerini biliyorsunuz?OrtaSistem TasarımıFull Stack
  3. REST ile GraphQL arasındaki farklar nelerdir?OrtaSistem TasarımıFull Stack
  4. Bit.ly benzeri bir URL kısaltma servisi tasarlayın.ZorSistem TasarımıFull Stack
  5. Google Docs benzeri gerçek zamanlı ortak düzenleme yüksek seviyede nasıl tasarlanır?ZorSistem TasarımıFull Stack
  6. CDN nedir, nasıl çalışır ve hangi durumlarda kullanılır?KolaySistem TasarımıFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle