Membangun Fitur Pencarian dengan Laravel Scout
Laravel versi 5.3 telah memiliki fitur pencarian full-text via package Scout. Implementasinya sangat mudah karena Scout sudah terintegrasi dengan Eloquent ORM. Hingga artikel ini ditulis, Scout sudah mendukung search engine Algolia dan Elasticsearch. Tapi tidak menutup kemungkinan ke depannya akan ditambahkan lagi search engine yang lain untuk memenuhi kebutuhan penggunanya.
Cara Pemasangan Scout
Sebelumnya pastikan kamu telah membuat sebuah projek Laravel versi 5.3, lalu buka file composer.json
pada editor kamu. Tambahkan dependency untuk Scout seperti ini:
"require": {
"php" : ">=5.6.4",
"laravel/framework": "5.3.*",
"laravel/scout": "1.1.*",
...
}
Jalankan composer update
pada terminal untuk menginstal Scout pada projek Laravel kamu (note: butuh koneksi internet). Setelah proses instalasi selesai, jalankan php artisan vendor:publish
untuk menghasilkan file konfigurasi untuk Scout. Selanjutnya, buka file config/app.php
lalu tambahkan Laravel\Scout\ScoutServiceProvider::class
pada bagian providers
.
Menggunakan Scout pada Model
Pada dasarnya, penggunaan Scout terdiri dari dua langkah, yaitu mengimpor kelas trait Laravel\Scout\Searchable
dan menggunakan trait tersebut pada model
yang telah kamu buat. Contoh penggunaannya dapat dilihat pada kode di bawah ini:
<?php
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Modelku extends Model
{
use Searchable;
}
Melakukan Pencarian
Untuk melakukan pencarian, kamu bisa menambahkan kode di bawah ini di suatu method di controller
:
$result = <Nama Namespace>\<Nama Model>::search('<kueri pencarian>')->get();
Variabel $result
akan menyimpan kumpulan model
Eloquent dalam bentuk array
dan dapat dimanfaatkan dengan mengirimkan variabel tersebut lewat fungsi view()
.
Integrasi dengan Elasticsearch
Sampai pada tahap ini Scout kamu belum bisa digunakan karena kamu belum mengatur search engine-nya. Di antara dua pilihan search engine yang di dukung oleh Scout, yang dapat diinstal di lokal dan gratis adalah Elasticsearch. Untuk instalasinya kamu perlu menginstal Java-JRE terlebih dahulu. Setelah itu unduh Elasticsearch-nya disini. Bagi yang menggunakan OS Debian/Ubuntu, pilih versi deb
. Setelah file selesai terunduh, instal dengan menjalankan perintah sudo dpkg -i <nama-file-elasticsearch.deb>
. Untuk mengecek apakah Elasticsearch telah terinstal dan berjalan dengan baik, jalankan perintah curl -X GET http://localhost:9200
.
Cara instalasi Elasticsearch pada OS Windows kedepannya akan ditambahkan di artikel ini.
Untuk berkomunikasi dengan Elasticsearch dengan php kita perlu menginstal librari elasticsearch-php
dengan menjalankan perintah composer install elasticsearch\elasticsearch-php
.
Setelah semuanya terinstal, buka file config/scout.php
, ganti driver
dengan nilai ‘elasticsearch’ dan isi host
pada konfigurasi bagian Elasticsearch dengan ‘http://localhost:9200’. Hasil konfigurasinya kurang lebih akan seperti di bawah ini:
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Search Engine
|--------------------------------------------------------------------------
|
| This option controls the default search connection that gets used while
| using Laravel Scout. This connection is used when syncing all models
| to the search service. You should adjust this based on your needs.
|
| Supported: "algolia", "null"
|
*/
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
...
...
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'laravel'),
'config' => [
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://localhost:9200')
],
],
],
];
Kamu mungkin akan perlu melakukan indexing apabila model
kamu telah memiliki record di database. Caranya adalah dengan menjalankan perintah php artisan scout:import "<Nama Namespace>\<Nama Model>"
.
Testing
Jalankan php artisan tinker
di terminal. Pada shell
yang muncul, ketik <Nama Namespace>\<Nama Model>::search('<kata kunci pencarian>')->get()
lalu tekan <enter>
.
Contoh kasus: Kamu punya
model
App\Models\Makanan
. Pada database telah tersimpan recordMakanan
dengan nama ‘Kentang Goreng’, ‘Kentang Rebus’ dan ‘Kentang Bakar’. Dengan menjalankan perintahApp\Models\Makanan::search('kentang')->get()
padashell
, kamu akan mendapatkan tiga record tersebut yang relevan dengan kata kunci ‘kentang’.
Penutup
Dengan Scout, kita dapat dengan mudah membangun fitur pencarian pada projek Laravel. Untuk lebih jelasnya kamu dapat mempelajari penerapan Scout pada source code ini. Selamat belajar~