DjangoHaystack ve DRF-Haystack
Bir süredir(tekrar) django ve python kurcalıyorum. Django’su idi, django-admin’i idi, django-rest-framework idi falan çok güzel kütüphaneler zaten. İş bunlara bir search engine (solr elastic vs ) takmaya gelince biraz kurcaladığımda django-haystack ile karşılaştım.
Fakat benim ihtiyacım bunu geliştirdiğim rest-api’ye bağlamaktı. Biraz daha kurcalayınca çok beğendiğim bu kütüphaneyi Django Rest Framework üzerinden hızlıca kullanabilmeyi sağlayan drf-haystack kütüphanesini buldum.
Bu kütüphane sayesinde sisteme elastic-search takmak tahmini olarak 1 saat civarında falan sürdü.
Basitçe özetlemek gerekir ise gerekli konfigürasyonu yaptıktan sonra, veriyi sağlayacak olan bir modeliniz oluyor, sonrasında bir search_indexes.py dosyası içinde indekslerinizi belirtiyorsunuz. Bu indeks üzerindede model ile direk bağlantılı alanları kullanabiliyorsunuz(model_attr=bişey_gibi) veya dinamik oluşturduğunuz alanları doldurabiliyorsunuz. Sonrasında bunlar üzerinde arama yapabiliyorsunuz.
Önce settings.py üzerinde haystack ayarlarınız yapmalısınız.
Ben kendi kullandığım modeli fikir vermesi açısından paylaşıyorum. Ama FK bağlantılı diğer modeller malesef yok :)
Şimdi de indeksimizi oluşturalım.
Buna bağlı olan serializer ve view’ ı oluşturuyoruz.
Son olarak urls tanımını yaparak kullanmaya geldi.
Projenin urls.py dosyasına şu satırı eklememiz yeterli:
router.register("search", SearchModelViewSet, base_name="search")
Son olarak indekleri oluşturmak için:
python manage.py update_index
Indeks şemasını güncelleyerek tekrar indeksleme yapmak için:
python manage.py rebuild_index
komutunu kullanıyoruz.
Şuradan da inceleyebileceğiniz gibi sorgu gönderme işi müthiş :)
Tek can sıkıcı noktası henüz sadece Elasticsearch 1.X’e destek verebilmeleri. Github üzerinde diğer elastic sürümleri ile ilgili açılmış işler var. Umarım kısa zamanda yol alırlar.