Meningkatkan Fitur Pencarian di Aplikasi Laravel dengan Laravel Scout dan Algolia


Laravel Scout

Laravel Scout adalah sebuah paket (package) untuk Laravel, sebuah framework PHP yang populer, yang menyediakan integrasi full-text search ke dalam model-model Eloquent. Dengan menggunakan Laravel Scout, dapat dengan mudah menambahkan fitur pencarian ke dalam aplikasi Laravel, dengan mendukung berbagai driver search seperti Algolia dan Meilisearch.

Algolia

Algolia adalah API pencarian dan penemuan yang memungkinkan integrasi pencarian cepat dan relevan ke dalam situs web dan aplikasi. Algolia menawarkan pencarian real-time dari ketikan pertama, mendukung pencarian teks lengkap, serta pencarian berbasis data numerik dan terfaktorisasi, yang meningkatkan pengalaman pengguna dengan hasil yang cepat dan relevan.

Instalasi dan Konfigurasi

  1. Buat akun algolia

kunjungi https://www.algolia.com/ lalu buat akun algolia. Setelah itu login ke dashboard melalui tautan https://dashboard.algolia.com/. Pastikan pada bagian navbar terdapat application. Secara default biasanya nama aplication adalah “My First Application”

  1. Instal package Laravel Scout

jalankan perintah ini untuk menginstal laravel scout:

composer require laravel/scout

jalankan perintah ini untuk menginstal Algolia search client:

composer require algolia/algoliasearch-client-php

  1. Publikasi Konfigurasi Scout

Cara mempublikasikan file konfigurasi Laravel Scout:

php artisan vendor:publish –provider=”Laravel\Scout\ScoutServiceProvider”

Setelah perintah di atas dijalankan akan muncul file baru pada yaitu config/scout.php

  1. Mengatur Konfigurasi di .env

Buka kembali halaman dashboard algolia. Klik avatar pada klik kanan atas lalu pilih setting. Selanjutnya pilih API keys pada bagian team and Access.

Setelah itu akan muncul kumpulan key yang nantinya akan digunakan pada file .env. 

Tambahkan key baru pada  file .env:

ALGOLIA_APP_ID=<aplication_id>

ALGOLIA_SECRET=<write_api_key>

Masukkan key yang ada di halaman API keys sesuai dengan key diatas.

  1. Mengedit File Konfigurasi Scout

Pastikan file config/scout.php berisi:

‘driver’ => env(‘SCOUT_DRIVER’, ‘algolia’),

‘algolia’ => [
‘id’ => env(‘ALGOLIA_APP_ID’),
‘secret’ => env(‘ALGOLIA_SECRET’),
]

Implementasi

  1. Menambahkan Trait Searchable ke Model

Studi kasus yang digunakan misal website e-commerce yang memiliki banyak produk. Oleh karena itu diperlukan table product. Buat model dan migration product terlebih dahulu

Migration:

Schema::create(‘products’, function (Blueprint $table) {

            $table->id();

            $table->string(‘name’);

            $table->text(‘description’);

            $table->string(‘brand’);

            $table->json(‘categories’);

            $table->decimal(‘price’, 8, 2);

            $table->string(‘image’);

            $table->integer(‘popularity’);

            $table->timestamps();

        });

Model:

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

use Laravel\Scout\Searchable;

class Product extends Model

{

    use HasFactory, Searchable;

    protected $fillable = [‘name’, ‘category’, ‘short_desc’, ‘price’, ‘brand’, ‘rating’, ‘image’];

    protected $casts = [

        ‘category’ => ‘array’,

    ];

    public function toSearchableArray()

    {

        return $this->toArray();

    }

}

Pada model Product tambahkan traits Searchable untuk mengimplementasikan fitur searchable milik laravel scout. Selanjutnya jangan lupa jalankan perintah

php artisan migrate

  1. Import Data

Pada algolia terdapat sample data e-commerce yang bisa digunakan. Sample data dapat di akses di https://raw.githubusercontent.com/algolia/doc-onboarding/master/datasets/ecommerce.json. Download file json tersebut lalu untuk memudahkan import ke MySQL gunakan layanan web untuk mengubah data dari json ke sql seperti contohnya konbert. Upload file json lalu uncheck “Create table”. Pilih syntax MySQL lalu sesuaikan nama table menjadi “products” sesuai dengan migration yang telah dibuat. Klik convert untuk mendownload file sql. Setelah itu import sql ke database untuk digunakan.

  1. Mengindeks Data

Setelah data berhasil di import. Selanjutnya adalah melakukan indeks data ke algolia. Gunakan perintah ini:

php artisan scout:import “App\Models\Product”

Perintah ini akan melakukan import data dari database ke server algolia. Selanjutnya buka kembali dashboard Algolia lalu pilih menu search di bagian sidebar. Maka seharusnya index product akan muncul dibagian atas.

selanjutnya klik tab configuration di sebelah tab browser.

tambahkan beberapa attribute yang bisa dilakukan search seperti name, description, brand, dan categories.

  1. Membuat Query Pencarian

Selanjutnya query pencarian bisa di lakukan menggunakan laravel scout dengan syntax:

$product = App\Models\Product::search(‘keyword’)->get();

atau bisa menambahkan pagination dengan syntax

$product = App\Models\Product::search(‘keyword’)->paginate(20);

Dengan mengikuti langkah langkah diatas, aplikasi laravel bisa menggunakan function search() yang dibuat berdasarkan laravel scout dan algolia. 

implementasi laravel scout dan algolia dapat digunakan seperti di atas. Misal jika menggunakan search query ion battery maka algoritma dari algolia akan melakukan search dengan keyword yang diberikan. Laravel scout merupakan penghubung antara aplikasi web laravel dengan driver search engine seperti algolia. Perbedaan search engine algolia dengan query sql yang menggunakan LIKE adalah query LIKE memiliki keterbatasan search dimana misal keyword yang diberikan “ion battery” maka nama dan deskripsi yang akan sesuai hanya kalimat yang mirip dengan keyword tersebut. Seperti contoh diatas terdapat produk dengan nama “Ultralast – Lithium-ion Battery….” yang berhasil dicari dengan keyword yang diberikan. Hal ini karena algolia memiliki kemampuan untuk search full text yang terdapat pada data.

source:

https://laravel.com/docs/11.x/scout
https://www.algolia.com
https://raw.githubusercontent.com/algolia/doc-onboarding/master/datasets/ecommerce.json
https://konbert.com/convert/json/to/sql

Ditulis oleh Backend Developer Intern at Digital Amoeba MSIB Batch 6
Afif Rohul Abrori – Universitas Jember (linkedin.com/in/afifrohul)