Aramayan Bulamaz
×
laravel etiketine 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

Meilisearch ve Laravel Entegrasyonu

Bu yazımca MeiliSearch ve Laravel Entegrasyonundan bahsedeceğim.

MeiliSearch, Elasticsearch ile aynı mantıkla çalışan bir arama motorudur. Ancak Elasticsearch çok fazla kaynak harcamaktadır. MeiliSearch ise daha az kaynak ile benzer işleri yapabilmektedir. Şimdi burada yanlış anlaşılmak istemem. MeiliSearch Elasticsarch’ten daha iyidir şeklinde anlaşılmasın, Elasticsearch dağınık bir sunucu yapısıyla kurulabilir, hatta özellik ve kapasite bakımından MeiliSearch’ten daha iyidir. Ancak çok fazla kaynak harcamak istemiyorsanız, daha az kaynakla yalnızca alakalı arama yapmaya yeterli olan bir RESTful arama API’sidir. MeiliSearch için kısacası “fakirler için elasticsearch”  diyebiliriz.

Aslında Meilisearch bize site içi arama motoru yapmamızı sağlayan bir araç diyebiliriz. Yıllar önce "site içi arama motoru yapımı" konusunda doğrudan mysql üzerinde like sorgusu yaparak aramadan bahsetmiştim. Burada daha gelişmiş bir arama işlemi gerçekleştireceğiz.

MeiliSearch Kurulumu

Kurulum işlemini Ubuntu üzerinden anlatacağım. Terminalde aşağıdaki komutları çalıştırarak kurulum işlemlerini gerçekleştirebilirsiniz.

apt update apt install curl -y curl -L https://install.meilisearch.com | sh chmod +x meilisearch mv ./meilisearch /usr/local/bin/

 

useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml mkdir /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/snapshots chown -R meilisearch:meilisearch /var/lib/meilisearch chmod 750 /var/lib/meilisearch

 

cat << EOF > /etc/systemd/system/meilisearch.service [Unit] Description=Meilisearch After=systemd-user-sessions.service [Service] Type=simple WorkingDirectory=/var/lib/meilisearch ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml Use

Laravel ve MongoDB Entegrasyonu

Merhaba, iş yoğunluğum sebebiyle uzun zamandır blog yazamıyordum. Bu yazımda Laravel projenizde MongoDB veritabanını nasıl kullanırız onu anlatacağım.

Laravel varsayılanda MySQL desteği ile kuruluyor. Bunun yanı sıra config/database.php dosyasında PostgreSQL, SQLite ve SQL Server desteklerinin olduğunu görüyoruz. Veritabanı seçimi, projenin en başında, proje büyüklüğüne, veriye ne kadar sıklıkla ulaşmak isteyeceğimize ve ileride veri boyutu yükseldiğinde ihtiyaç halinde rahatça scaling yapabileceğimiz bir şekilde seçmek daha doğru olacaktır.

Yapmış olduğum projenin ilerleyen safhalarında veri boyutunun artacağını ön gördüğümüz için bu sebeple de veritabanı tarafında yükü daha da azaltmak ve problem yaşanması durumunda çözüm üretilene kadar kullanıcıların bunu en hafif şekilde hissedebilmesi için horizontal scaling yapısına uygun bir veritabanı seçmeye karar verdik.

Burada biraz araştırma yaptım, MongoDB, Cassandra vs hangisi Laravel ile daha uyumlu çalışır ve hangisinin resmi bir composer paketi var. Google’da “Laravel with nosql” şeklinde arama yapınca da ilk sırada MongoDB çıkıyor ve MongoDB’nin kendi hazırlamış olduğu composer paketi de var, bu sebeple projeye MongoDB ile ilerlemeye karar verdik.

MongoDB kurulumu ile ilgili olarak burada anlattığım konuyu inceleyebilirsiniz.

Eğer sunucuda (Local bilgisayarınız ya da uzak sunucu fark etmez, genel olarak sunucu diyeceğim) php-mongodb kurulu değilse bunun kurulumunu yapıyoruz. Bu işlem kullanmakta olduğunuz PHP sürümü ya da sunucuya göre değişebilir. Cpanel’de EasyApache ya da Pecl installer üzerinden, Plesk Panelde kullanacağınız PHP sürümüne terminalden pecl ile kurulabir. Ben Ubuntu sunucu üzerine kurulumdan bahsederek devam edeceğim.

apt install php-mongodb -y

Daha sonra Laravel projemizin olduğu dizinde terminalde aşağıdaki komut ile gerekli composer paketini kuruyoruz.

composer require mongodb/laravel-mongodb

Kurulum tamamlandıktan sonra confi

  • Önceki Sayfa
  • Sonraki Sayfa