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 moteurdatabase 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
Laravel\Scout\Searchable aux modèles à indexer.
Configuration de la queue
Avec un moteur autre quedatabase / 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.
Jobs uniques
Pour éviter des jobs dupliqués sur le même enregistrement, enregistrezMakeSearchableUniquely / RemoveFromSearchUniquely (souvent dans boot).
Prérequis par driver
Algolia
Configurezid et secret dans config/scout.php et installez le SDK.
.env :
Paramètres d’index
Gérez les paramètres d’index dansconfig/scout.php.
Meilisearch
Meilisearch est un moteur open source performant. En local, via Docker Sail :.env :
Paramètres d’index (Meilisearch)
Avant d’utiliserwhere(), déclarez filterableAttributes ; pour orderBy(), sortableAttributes.
Typesense
Typesense prend en charge keyword, sémantique, géo et vector search..env :
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.
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). SurchargezsearchableAs.
Stratégies pour le moteur database
Précisez la stratégie par colonne avec des attributs PHP.Indexation conditionnelle
DéfinissezshouldBeSearchable.
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.
Vider l’index
Pause de la synchronisation
UtilisezwithoutSyncingToSearch 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 :
raw() pour la réponse brute :
Pagination
simplePaginate est efficace pour de gros volumes.
Filtres et tri
where ajoute des filtres.
query personnalise la requête Eloquent finale.
Eager Loading
Scout récupère les IDs puis les modèles via Eloquent. Évitez N+1 avecwith() dans query.
makeAllSearchableUsing.
Soft delete
Si le modèle utilise soft delete, activezsoft_delete: true dans config/scout.php.
withTrashed / onlyTrashed.
Moteur personnalisé
Créez votre propre moteur en étendantLaravel\Scout\Engines\Engine et en implémentant 8 méthodes.
Laravel\Scout\Engines\AlgoliaEngine.
Enregistrez-le dans boot :
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.