Skip to content

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

FiturPenggunaan MeilisearchCatatan
Pencarian artikelSCOUT_DRIVER=meilisearchJudul, konten, ringkasan, penulis, tag
Filterable attributessearchableSettings()is_active, published_at, category_id, school_id
Pencarian + filter landingSatu panggilan MeilisearchTanpa filter ulang di SQL
IndexingVia 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=true

Docker 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_data

Menjalankan 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.0

Integrasi 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-index

Re-import semua artikel

bash
php artisan scout:import "App\Models\News\Article\Article"

File Penting

FileTujuan
config/scout.phpDriver Scout, host/key Meilisearch
app/Models/News/Article/Concerns/HasSearchable.phpBentuk searchable + settings index
app/Console/Commands/SyncArticleSearchIndex.phpMenerapkan filterable attributes
docker-compose.ymlDefinisi service Meilisearch
.envSCOUT_DRIVER, MEILISEARCH_*, SCOUT_QUEUE