Meilisearch
Ringkasan
Meilisearch menyediakan pencarian full-text untuk artikel. Berjalan sebagai service terpisah di Docker stack dan terhubung ke Laravel lewat Scout (laravel/scout + meilisearch/meilisearch-php). Meilisearch menangani relevansi, typo-tolerance, dan filter, sehingga PostgreSQL tidak lagi dipakai untuk query ILIKE di pencarian.
Penggunaan
| Fitur | Penggunaan Meilisearch | Catatan |
|---|---|---|
| Pencarian artikel | SCOUT_DRIVER=meilisearch | Judul, konten, ringkasan, penulis, tag |
| Filterable attributes | searchableSettings() | is_active, published_at, category_id, school_id |
| Pencarian + filter landing | Satu panggilan Meilisearch | Tanpa filter ulang di SQL |
| Indexing | Via Redis queue (SCOUT_QUEUE=true) | Penulisan non-blocking |
Environment Variables
env
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=...
SCOUT_PREFIX=
SCOUT_QUEUE=trueDocker Compose
yaml
services:
meilisearch:
image: getmeili/meilisearch:v1.52.0
environment:
MEILI_MASTER_KEY: ${MEILISEARCH_KEY}
MEILI_ENV: production
ports:
- "7700:7700"
volumes:
- meilisearch_data:/meili_dataMenjalankan tanpa Docker Compose
bash
docker run -d \
--name sutomo-meilisearch \
-p 7700:7700 \
-v ~/meilisearch/data:/meili_data \
-e MEILI_MASTER_KEY=sutomo-master-key-2026 \
-e MEILI_ENV=development \
getmeili/meilisearch:v1.52.0Integrasi Model
Article dibuat searchable via concern HasSearchable:
php
// app/Models/News/Article/Concerns/HasSearchable.php
public function searchableSettings(): array
{
return [
'filterableAttributes' => [
'is_active',
'published_at',
'category',
'school',
'category_id',
'school_id',
],
];
}Sinkron ulang settings index
Setelah mengubah searchableSettings(), terapkan ke index yang berjalan:
bash
php artisan articles:sync-search-indexRe-import semua artikel
bash
php artisan scout:import "App\Models\News\Article\Article"File Penting
| File | Tujuan |
|---|---|
config/scout.php | Driver Scout, host/key Meilisearch |
app/Models/News/Article/Concerns/HasSearchable.php | Bentuk searchable + settings index |
app/Console/Commands/SyncArticleSearchIndex.php | Menerapkan filterable attributes |
docker-compose.yml | Definisi service Meilisearch |
.env | SCOUT_DRIVER, MEILISEARCH_*, SCOUT_QUEUE |