Di awal kemunculannya, Laravel 5.3 menyediakan berbagai fitur yang memanjakan penggunanya. Salah satu diantaranya adalah tersedianya beberapa driver yang dapat digunakan untuk fitur pencarian full-text menggunakan package Scout.
Laravel 5.3 dengan Algolia driver, namun memungkinkan anda untuk membuat custom drivers dengan mudah. Sebagaimana yang di lakukan oleh TeamTnt yang menyediakan TNTSearch Driver untuk Laravel scout.
Tahap Persiapan
Langkah pertama tentunya anda sudah menginstall Laravel 5.3, jika belum silahkan install terlebih dahulu (panduan bisa dilihat pada dokumentasi laravel).
Jika sudah jangan lewatkan untuk menginstall packages yang di perlukan untuk menjalan Scout & TNTSearch. Install Laravel Scout terlebih dahulu :
composer require laravel/scout
Kemudian install TNTSearch Driver
composer require teamtnt/laravel-scout-tntsearch-driver
Selanjutnya tambahkan ScoutServiceProvider dan TNTSearchScoutServiceProvider pada config/app.php bagian providers
'providers' => [
/*
* Package Service Providers...
*/
Laravel\Scout\ScoutServiceProvider::class,
TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
]
Saatnya publish file konfigurasi laravel scout :
php artisan vendor:publish –provider="Laravel\Scout\ScoutServiceProvider"
Proses diatas akan secara otomatis membuat sebuah file konfigurasi scout.php pada folder config. Kemudian lakukan konfigurasi agar Scout menggunakan TNTSearch Driver bukan Algolia.
Pada file .env tambahkan baris berikut :
SCOUT_DRIVER=tntsearch
Selanjutnya pada config/scout.php tambahkan baris berikut :
'tntsearch' => [
'storage' => storage_path(),
],
Hal ini dilakukan untuk menetukan lokasi dimana file index akan disimpan. Tahap konfigurasi yang menghubungkan antara Laravel Scout dan TNTSearch telah berhasil di lakukan dan siap digunakan untuk membuat fitur pencarian full-text menggunakan scout.
MEMBUAT DATABASE
Dalam proses pencarian pasti dibutuhkan sebuah data, data yang akan dicari tentunya. Karena pada kasus kali ini kita tidak memiliki data maka sebagai contoh akan menggunakan sample dari sakila film database dari MySQL sample database yang telah menyediakan schema data yang dapat digunakan.
Sekarang sample data yang akan digunakan dalam fitur pencarian telah kita miliki. Saatnya membuat model Eloquent untuk table film.
php artisan make:model Film
namespace App;
use Illuminate\Database\Eloquent\Model;
class Film extends Model
{
protected $primaryKey = 'film_id';
protected $table = 'film';
}
Lakukan konfigurasi pada PrimaryKey dan Table atribut pada Model agar Eloquent dapat mendefinisikan apa yang akan digunakan.
Kemudian mari kita lihat total record yang ada pada table ‘film’, ternyata sudah ada 1000 records sangat perfect digunakan untuk melakukan testing dan develop fitur search dengan laravel scout dan TntSearch.
Model Indexes
Berdasarkan informasi yang terdapat pada dokumentasi laravel, “Setiap Model Eloquent disinkronisasikan dengan memberikan index pencarian, dimana terdapat searchable records untuk model tersebut. Dengan kata lain, dapat dikatakan bahwa index yang diberikan Eloquent seperti yang terdapat pada MySQL Table. Secara default, setiap model akan melakukan index matching atau mencari index yang cocok pada model khususnya pada nama “table”. Biasanya nama model bersifat jamak. Akan tetapi kita bebas untuk menyesuaikan index pada model dengan menggunakan metode searchableAs pada model. “
Langkah pertama, tambakan trait Searchable pada model, kemudian lakukan konfigurasi index name yang akan digunakan dan simpan. Index ini akan digunakan untuk melakukan pencarian sebagai pengganti query database, sehingga akan meningkatkan speed, perform atau kecepatan dalam proses pencarian.
use Laravel\Scount\Searchable;
use Searchable;
public function searchableAs()
{
return 'films_index';
}
Sehingga akan menjadi seperti ini
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Film extends Model
{
use Searchable;
protected $primaryKey = 'film_id';
protected $table = 'film';
public function searchableAs()
{
return 'films_index';
}
}
Indexing
Pada tahap ini, kita akan membuat index file untuk pertama kalinya.
php artisan scout:import "App\Film"
Dapat kita lihat dengaan jelas bagaimana Laravel Scout membuat potongan data dan mengimpor kedalam indeks dengan jumlah data 100 rows pada waktu yang bersamaan, hal ini juga dapat mencegah crash atau time out. Keren bukan ?
Sekarang kita memiliki sebuah file dalam direktori Storage yang bernama films_index.index yang akan digunakan oleh Laravel Scount pada saat melakukan pencarian menggunakan model Film.
Mungkin anda bertanya, apa yang akan terjadi pada data tersebut ketika anda memperbaharui table film tersebut ? Apakah perlu untuk mengimport data lagi dan membuat index kembali ? Tentu saja tidak!. Karena Laravel Scout secara otomatis akan memperbaharui index setiap kali kita memperbaharui Model yang terkait. Misal ketika anda membuat records baru, memperbaharui data, ataupun menghapus data.
Pencarian menggunakan TNT Search
Kali ini kita dapat menggunakan method search pada model yang telah di sediakan oleh trait Searchable.
App\Film::search('ANGELS LIFE')->get();
Perintah diatas merupakan contoh penggunakan method search menggunakan driver TNT Search yang lakukan pada tinker (php artisan tinker) untuk proses testing.
Sebagaimana yang kita lihat, perintah tersebut menghapus 3 hasil, yang dimana semua hasil tersebut mengandung keyword atau kata kunci yang kita cari. Keren bukan ? Sampaikan salam dan sampai jumpa pada WHERE LIKE query. :D
Perlu di ketahui bawah semua field yang di index akan digunakan selama pencarian. Kecepatan dalam mendapatkan hasil pencarian menggunakan metode tersebut sungguh menakjubkan. Dan tentunya ini akan sangat bermanfaat untuk meningkatkan kecepatan aplikasi anda ketika anda memiliki jumlah data yang besar untuk di cari.
Comments