Aramayan Bulamaz
×
21 Dec 2023 tarihine ait içerikleri görüntülemektesiniz.
Laravel - Meilisearch ve MongoDB Entegrasyonu

Bir önceki yazımda Laravel ve Meilisearch entegrasyonundan, bir önceki yazımda da Laravel ve MongoDB entegrasyonundan bahsetmiştim. Bu yazımda ise bu üçünü birlikte nasıl kullanacağımızdan bahsedeceğim.

Önceki yazılarımda belirttiğim gibi MongoDB ve Meilisearch entegrasyonlarını yapıyoruz. Aslında her şey normal çalışıyor, eklediğim içerik Meilisearch tarafında da oluşuyor, güncelleme yapınca güncelleniyor ya da sildiğimde aynı şekilde Meilisearch tarafında da siliniyor ancak tek bir sorun var, arama yaptığımda herhangi bir sonuç gelmiyor.

Burada yapılan arama işlemi sonrası çalıştırılan veritabanı sorgusunu debugbar çıktısından incelediğimde sorunun MongoDB tarafında çalıştırılan arama sorgusundan kaynaklandığını gördüm.

Meilisearch, Mysql ile geliştirilen projede yapılan arama için aşağıdaki örnek sorguyu çalıştırıyor

select * from `products` where `products`.`id` in (2, 1)

products isimli tabloda yapılan aramaya göre id değerleri 1 ve 2 olan içerikleri çağırmış oluyor bu şekilde ancak where şartında tablo adı bir daha belirtilmiş. MongoDB tarafında da olay işte burada başlıyor :)

MongoDB tarafında sorgu şu şekilde çalıştırılıyor.

products.find({"products._id": {"$in":["656d9ac0ab082026280db1a4","656d9a78ab082026280db193"]}},{"typeMap":{"root":"array","document":"array"}})

products._id isimli bir field yoktur, sql tarafında table.column_name şeklinde sorgu yazabiliriz ancak MongoDB tarafında bu şekilde sorgu yazamıyoruz.

/vendor/laravel/scout/src/Searchable.php dosyasında sorguların Laravel’in kendi query builder yapısından geldiği görülüyor. Bu dizindeki dosyalara maalesef müdahale edemeyiz. Bu yüzden Searchable.php dosyasının kopyasını alarak düzenleme yapacağız ve searcahble olarak tanımlamak istediğimiz modellere bunu çağıracağız.

/vendor/laravel/scout/src/Searchable.php bu dosyayı app dizini altında Traits dizini oluşturarak kopyalıyoruz, app dizini altında istediğini

  • Önceki Sayfa
  • Sonraki Sayfa