Skip to main content

Introduction

Laravel Scout est une solution simple, à base de drivers, qui ajoute la recherche plein texte aux modèles Eloquent. Un observer synchronise automatiquement les enregistrements avec l’index. Scout inclut un moteur database intégré qui utilise l’index full text et LIKE de MySQL / PostgreSQL — sans service externe. Pour de grosses productions avec tolérance aux fautes, facettes ou géo-recherche, un moteur externe est utile.

Moteurs supportés

Installation

Publiez la configuration :
Ajoutez le trait Laravel\Scout\Searchable aux modèles à indexer.

Configuration de la queue

Avec un moteur autre que database / collection, il est vivement recommandé de configurer une queue pour que la synchronisation d’index se fasse en arrière-plan et n’impacte pas les temps de réponse. Dans config/scout.php, mettez queue à true.
Vous pouvez préciser connexion et nom de queue :
Démarrez un worker dédié :

Jobs uniques

Pour éviter des jobs dupliqués sur le même enregistrement, enregistrez MakeSearchableUniquely / RemoveFromSearchUniquely (souvent dans boot).
Ils utilisent les jobs uniques pour prévenir les doublons.

Prérequis par driver

Algolia

Configurez id et secret dans config/scout.php et installez le SDK.
.env :

Paramètres d’index

Gérez les paramètres d’index dans config/scout.php.
Puis synchronisez :

Meilisearch

Meilisearch est un moteur open source performant. En local, via Docker Sail :
Ou directement avec Docker :
Installez le SDK :
.env :
À chaque upgrade Scout, consultez aussi les breaking changes de Meilisearch.

Paramètres d’index (Meilisearch)

Avant d’utiliser where(), déclarez filterableAttributes ; pour orderBy(), sortableAttributes.
Attention aux types numériques : Meilisearch ne filtre correctement que si les types sont bons.
Synchronisez :

Typesense

Typesense prend en charge keyword, sémantique, géo et vector search.
.env :
Convertissez la clé primaire en string et created_at en timestamp UNIX.

Moteurs database / collection

Idéal sans service externe. database : full text + LIKE sur MySQL / PostgreSQL. Suffit dans la plupart des cas.
collection : filtre en PHP, fonctionne avec toutes les DB de Laravel dont SQLite. Adapté dev / tests / petits datasets.
Avec le moteur database, pas de gestion d’index manuelle : la recherche est directement sur la table.

Trait Searchable

Personnaliser toSearchableArray()

Par défaut, toArray() alimente l’index. Surchargez si nécessaire.

Personnaliser le nom d’index

Par défaut, le nom de table (pluriel). Surchargez searchableAs.

Stratégies pour le moteur database

Précisez la stratégie par colonne avec des attributs PHP.
Pour SearchUsingFullText, ajoutez un index full text sur les colonnes.

Indexation conditionnelle

Définissez shouldBeSearchable.
shouldBeSearchable ne fonctionne pas avec le moteur database. Utilisez une clause where à la place.

Gestion des index

Cette section concerne principalement Algolia, Meilisearch, Typesense. Le moteur database n’a pas besoin de gestion d’index.

Importer des enregistrements existants

scout:import importe les enregistrements existants.
Import en queue :

Vider l’index

Pause de la synchronisation

Utilisez withoutSyncingToSearch pour désactiver temporairement la sync.

Ajout / suppression manuels

unsearchable retire :
delete sur un modèle retire automatiquement de l’index.

Recherche

search puis get :
Renvoyer directement depuis une route donne du JSON.
raw() pour la réponse brute :

Pagination

Sur le moteur database, simplePaginate est efficace pour de gros volumes.
Blade :

Filtres et tri

where ajoute des filtres.
Sous Meilisearch, déclarez filterableAttributes au préalable.
query personnalise la requête Eloquent finale.

Eager Loading

Scout récupère les IDs puis les modèles via Eloquent. Évitez N+1 avec with() dans query.
Pour les imports en batch, définissez makeAllSearchableUsing.
makeAllSearchableUsing peut être inopérant avec des imports en queue : les relations ne survivent pas nécessairement à la sérialisation.

Soft delete

Si le modèle utilise soft delete, activez soft_delete: true dans config/scout.php.
Vous pouvez alors utiliser withTrashed / onlyTrashed.

Moteur personnalisé

Créez votre propre moteur en étendant Laravel\Scout\Engines\Engine et en implémentant 8 méthodes.
Inspirez-vous de Laravel\Scout\Engines\AlgoliaEngine. Enregistrez-le dans boot :
Puis dans config/scout.php :

Pages associées

Eloquent ORM

Rappels sur les modèles Eloquent.

Relations Eloquent

Relations et eager loading.

Queues

Scout peut mettre à jour l’index en arrière-plan via les queues.
Dernière modification le 20 juillet 2026