Alışveriş Sepeti

Sepetiniz boş

Veritabanı & Önbellek · 15 dk

Modern E-Ticaret Arama & Filtreleme Mimarisi: Çok Boyutlu (Faceted) Arama ve Agregasyonlar

Milyonlarca üründe anlık dinamik filtreleme (Marka, Beden, Fiyat, Renk) yaparken her filtrenin yanındaki ürün sayısını (Facet Counts) 12ms altında hesaplayan gelişmiş arama mimarimiz.

Yazar: Stilgen Core Engineering

Modern E-Ticaret Arama & Filtreleme Mimarisi: Çok Boyutlu (Faceted) Arama ve Agregasyonlar

1. Çok Boyutlu (Faceted) Arama Neden Performansın Katilidir?

Bir müşteri ayakkabı kategorisine girdiğinde yalnızca ürünleri değil, sol taraftaki filtre panelinde şunları da görmek ister:

  • Marka: Nike (142), Adidas (89), Puma (34)
  • Numara: 41 (56), 42 (94), 43 (82)
  • Renk: Siyah (112), Beyaz (85)

Kullanıcı "42 Numara" filtresine tıkladığı anda, diğer tüm filtrelerin (Marka ve Renk sayıları) yeni seçime göre anlık olarak yeniden hesaplanması gerekir. Acemi bir mimaride her filtre için ayrı bir COUNT(*) GROUP BY sorgusu çalıştırmak veritabanını felç eder.

2. Stilmerce Tekil Agregasyon (Single-Pass Aggregation) Modeli

Stilmerce, 5 farklı sorgu atmak yerine PostgreSQL'in FILTER (WHERE ...) ve JSON agregasyon özelliklerini kullanarak tüm facet sayılarını tek bir sorgu turunda (Single Round-Trip) hesaplar:

-- Tek Seferde Tüm Filtre Ağacını ve Ürünleri Döndüren Gelişmiş Sorgu
WITH filtered_products AS (
    SELECT id, brand_id, price_cents, specs
    FROM products
    WHERE category_id = 'c111-222' AND is_active = true
)
SELECT 
    -- 1. Marka Dağılımı
    jsonb_object_agg(brand_id, brand_count) AS brands,
    -- 2. Fiyat Aralığı
    MIN(price_cents) AS min_price,
    MAX(price_cents) AS max_price
FROM (
    SELECT brand_id, COUNT(*) AS brand_count
    FROM filtered_products
    GROUP BY brand_id
) sub;

Milisaniyelik Yanıt

Bu yöntem veritabanı üzerindeki disk okumalarını tek bir indekste birleştirir. 300.000 ürünlük bir kategoride filtre sayısı hesaplama süresi 850ms'den 12ms'ye düşer.

3. Akıllı Sıralama Algoritması: Alaka Düzeyi (Relevance) ve Stok Ağırlığı

Arama sonuçlarında yalnızca eşleşen kelimeye bakılmaz. Stokta kalmayan veya marjı düşük ürünleri en üstte göstermek satışları düşürür. Stilmerce sıralama motoru şu formülü uygular:

Skor = (Metin Eşleşme Skoru * 0.40) + (Stok Varlığı * 0.30) + (Popülerlik / Tıklama * 0.30)

Stokta tükenen ürünler arama sonuçlarının en sonuna otomatik olarak ötelenir; müşteriye her zaman hemen satın alabileceği ürünler sunulur.