Sunucuda Arama Motoru Barındırmak: Ne Zaman Gerekir?

Geçiş eşiği, sağladığı yetenekler, getirdiği kaynak yükü, veri senkronizasyonu, güvenlik ayarları ve kaynak planlaması. Sunucuda Arama Motoru Barındırmak: Ne…

Sunucuda Arama Motoru Barındırmak: Ne Zaman Gerekir?
İçindekiler
  1. Geçiş Eşiği
  2. Ne Sağlar?
  3. Getirdiği Yük
  4. Veri Senkronizasyonu
  5. Tutarsızlıkla Yaşamak
  6. Güvenlik
  7. Kurmadan Önce
  8. Kaynak Planlaması
  9. Sonuç
  10. Sıkça Sorulan Sorular (SSS)
  11. Ayrı arama motoru gerçekten gerekli mi?
  12. İndeksi nasıl güncel tutmalıyım?
  13. Eklediğim kayıt aramada hemen görünmüyor?
  14. Arama servisinde neye dikkat etmeliyim?

Sunucuda Arama Motoru Barındırmak: Ne Zaman Gerekir?

Site içi aramanız veritabanı sorgusuyla çalışıyor ve içerik büyüdükçe hem yavaşlıyor hem alakasız sonuçlar veriyor. Ayrı bir arama motoru kurmak çözüm olabilir — ama getirdiği yükü bilmek gerekir.

Bu yazı, kendi sunucunuzda arama motoru çalıştırmayı ele alıyor.

Geçiş Eşiği

Veritabanı aramasının yetmediğini gösteren işaretler:

  • Arama sorguları yavaşladı. Saniyelerle ölçülüyor.
  • Alaka sıralaması yapılamıyor. Sonuçlar rastgele sırada.
  • Yazım hatası toleransı gerekiyor.
  • Filtreleme ve arama birlikte yapılıyor.
  • Arama ana kullanım biçimi hâline geldi.

Beşinci madde belirleyici olandır: kullanıcılarınız siteyi menüden değil aramadan geziyorsa, arama artık bir yan özellik değil ana arayüzdür ve ona uygun bir altyapı hak eder.

Buna karşılık birkaç yüz içerikli bir sitede ayrı arama motoru kurmak, çözdüğünden fazla sorun getirir.

Ne Sağlar?

Özel bir arama motorunun veritabanı üzerinde sunduğu yetenekler:

  1. Alaka puanı hesaplama. Hangi sonuç daha uygun?
  2. Yazım hatası toleransı. Yaklaşık eşleşme.
  3. Kelime kökü analizi. Ekleri ayırt eder.
  4. Eşanlamlı desteği.
  5. Yönlü filtreleme. Kategori sayaçlarıyla.
  6. Anında öneri. Yazarken sonuç.

Üçüncü madde Türkçe içerikte en çok fark yaratan özelliktir: ek almış kelimeleri kök hâline indirgeyen bir analiz, "sunucuda" araması için "sunucu" içeren belgeleri de bulur.

Veritabanı tam metin araması bunu genellikle yapamaz ve kullanıcı aradığını bulamaz.

Getirdiği Yük

Ayrı bir servis çalıştırmanın maliyeti vardır:

Kalem Etkisi
Bellek tüketimi İndeks bellekte tutulur
Disk alanı İndeks veriden büyük olabilir
Senkronizasyon Veri iki yerde tutulur
Bakım Ayrı bir servis güncellenmeli
Yedekleme İndeks yeniden üretilebilir

Birinci satır en somut kısıttır: arama motorları performansı bellekten alır ve yetersiz bellekte hem yavaşlar hem sunucunun geri kalanını sıkıştırır.

Beşinci satır ise bir rahatlamadır. İndeks kaynak veriden yeniden üretilebildiği için ayrıca yedeklenmesi gerekmez — kaybolursa yeniden oluşturulur.

Veri Senkronizasyonu

En kritik tasarım kararı, indeksin nasıl güncel tutulacağıdır:

  • Anlık güncelleme: Kayıt değişince indeks de değişir.
  • Kuyruk üzerinden: Değişiklik kuyruğa atılır, işçi işler.
  • Periyodik toplu güncelleme: Belirli aralıklarla.
  • Tam yeniden indeksleme: Nadiren, sıfırdan.

İkinci seçenek çoğu yapı için doğru dengedir: indeksleme işlemini kuyruğa almak, arama motoru geçici olarak erişilemez olsa bile kullanıcı işleminin başarısız olmasını engeller.

Birinci seçenek riskli bir bağımlılık kurar — arama servisi çökerse kayıt kaydetme işlemi de başarısız olur.

Dördüncü seçenek her zaman elinizde bulunmalıdır. İndeks bozulduğunda veya şema değiştiğinde sıfırdan üretmek tek çözümdür.

Tutarsızlıkla Yaşamak

İki ayrı veri deposu tutmak kaçınılmaz bir gecikme üretir:

  1. Kullanıcı bir kayıt ekler
  2. Veritabanına yazılır
  3. İndeksleme kuyruğa girer
  4. Kısa süre sonra indekse yansır
  5. Bu arada aramada görünmez

Beşinci adım kullanıcı için kafa karıştırıcıdır: az önce eklediği kaydı aramada bulamayan kullanıcı, işlemin başarısız olduğunu düşünür.

Çözüm ya kullanıcıya durum bildirmek ya da kendi kayıtlarını listeleyen sayfaları veritabanından okumaktır. Arama, keşif için kullanılır; kesin listeler için değil.

Güvenlik

Arama servisleri varsayılan olarak korumasız gelebilir:

Önlem Neden
Yalnızca yerel arayüzü dinlesin İnternete açılmasın
Kimlik doğrulama açık olsun Varsayılan kapalı olabilir
Yönetim uçları kapatılsın İndeks silinebilir
Arama anahtarı sınırlı olsun Yalnızca okuma

Birinci satır en yaygın ve en tehlikeli ihmaldir: tüm ağ arayüzlerini dinleyen bir arama servisi, güvenlik duvarı kapatılmadıysa internetten erişilebilir hâle gelir — ve içindeki tüm veri okunabilir.

Dördüncü satır ise istemci tarafı arama kullanıyorsanız zorunludur. Tarayıcıya gömülen anahtar yalnızca arama yetkisi taşımalı, yazma veya silme yapamamalıdır.

Kurmadan Önce

Ayrı servis kurmadan denenebilecekler:

  • Veritabanı tam metin indeksi. Çoğu ihtiyacı karşılar.
  • Arama alanını hazırlamak. Birleştirilmiş, temizlenmiş metin.
  • Sonuç sayısını sınırlamak.
  • Popüler aramaları önbelleğe almak.
  • Dış arama servisi kullanmak.

Beşinci madde bakım yükünü tamamen ortadan kaldırır: barındırılan bir arama servisi kullanmak, sunucunuzda ek bellek ve bakım gerektirmez — karşılığında aylık bir maliyet ve dış bağımlılık gelir.

Küçük ve orta ölçekli siteler için bu, kendi servisinizi işletmekten genellikle daha ekonomiktir.

Kaynak Planlaması

Kendi sunucunuzda çalıştıracaksanız:

  1. İndeks boyutunu tahmin edin. Kaynak verinin katı olabilir.
  2. Belleği ona göre ayırın.
  3. Bellek sınırı tanımlayın. Sunucuyu tüketmesin.
  4. Yeniden indekslemeyi düşük trafikte yapın.
  5. İzleme ekleyin. Servis ayakta mı?

Üçüncü madde kritik bir korumadır: bellek sınırı tanımlanmamış bir arama servisi, indeks büyüdükçe sunucunun tüm belleğini alabilir ve web uygulamanız yanıt veremez hâle gelir.

Kaynakları esnek şekilde artırabildiğiniz sanal sunucu altyapısı üzerinde, arama servisi için ayrılan belleği ihtiyaca göre ölçeklendirmek mümkündür.

Sonuç

Ayrı bir arama motoru kurmanın en net gerekçesi şudur: kullanıcılarınız siteyi menüden değil aramadan geziyorsa, arama artık ana arayüzdür. Türkçe içerikte en büyük kazanç kelime kökü analizidir — veritabanı araması ek almış kelimeleri eşleştiremez. Ancak indeksleme işlemini kuyruğa alın: doğrudan bağımlılık kurarsanız arama servisi çöktüğünde kayıt kaydetme de başarısız olur. Ve servisi mutlaka yalnızca yerel arayüzde dinletin.

Sıkça Sorulan Sorular (SSS)

Ayrı arama motoru gerçekten gerekli mi?

Birkaç yüz içerikli bir sitede değil — veritabanının tam metin indeksi çoğu ihtiyacı karşılar. Geçişi gerektiren asıl işaret, aramanın ana kullanım biçimi hâline gelmesi ve alaka sıralaması ile yazım hatası toleransının zorunlu olmasıdır.

İndeksi nasıl güncel tutmalıyım?

Kuyruk üzerinden. Kayıt değiştiğinde indeksleme işini kuyruğa atın, bir işçi işlesin. Doğrudan bağımlılık kurarsanız arama servisi geçici olarak erişilemez olduğunda kullanıcının kayıt kaydetme işlemi de başarısız olur.

Eklediğim kayıt aramada hemen görünmüyor?

Normal — indeksleme kuyruk üzerinden yapıldığı için kısa bir gecikme olur. Kullanıcının kendi kayıtlarını listeleyen sayfaları veritabanından okuyun; aramayı keşif için kullanın, kesin listeler için değil.

Arama servisinde neye dikkat etmeliyim?

Yalnızca yerel arayüzü dinlemesine. Tüm ağ arayüzlerini dinleyen bir servis, güvenlik duvarı kapatılmadıysa internetten erişilebilir olur ve içindeki tüm veri okunabilir. Ayrıca bellek sınırı tanımlayın — indeks büyüdükçe sunucunun tüm belleğini alabilir.