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.
Recherche sémantique et hybride (Meilisearch)
Pour utiliser la recherche sémantique ou hybride avec Meilisearch, définissez un embedder dans les paramètres d’index et les informations d’embedding dans les paramètres de modèle.toSearchableEmbedding du modèle renvoie le texte source à embarquer via le Laravel AI SDK, ou un tableau d’embedding précalculé. Après modification de la configuration, exécutez scout:sync-index-settings.
Typesense
Typesense prend en charge keyword, sémantique, géo et vector search..env :
created_at en timestamp UNIX.
Recherche sémantique et hybride (Typesense)
Pour activer la recherche sémantique et hybride avec Typesense, définissez un réglageembedding et un champ vectoriel dans les paramètres Typesense du modèle. Par défaut, Scout utilise le Laravel AI SDK pour générer les embeddings.
toSearchableEmbedding du modèle renvoie le texte source à embarquer par Scout, ou un tableau d’embedding précalculé.
Si vous utilisez la fonctionnalité d’embedding native de Typesense, vous pouvez générer les embeddings sans passer par le Laravel AI SDK. Pour plus de détails, consultez la documentation officielle de Typesense.
Turbopuffer
Turbopuffer est un moteur de recherche qui prend en charge la recherche full text, sémantique et hybride. Pour utiliser le driver Turbopuffer, définissezSCOUT_DRIVER et votre clé API.
TURBOPUFFER_REGION est facultatif et vaut gcp-us-central1 par défaut.
Moteurs database / collection
Idéal sans service externe.
database : full text + LIKE sur MySQL / PostgreSQL. Suffit dans la plupart des cas.
Recherche sémantique et hybride
Le moteur database prend en charge la recherche sémantique et hybride avec PostgreSQL et l’extensionpgvector. Ajoutez à la table du modèle une colonne vectorielle nullable et un index full text. Scout enregistre l’embedding après la sauvegarde du modèle : la colonne vectorielle doit donc être nullable.
toSearchableEmbedding sur le modèle : elle renvoie le texte source que Scout embarque, ou un tableau d’embedding précalculé. Les embeddings sont stockés par défaut dans la colonne embedding ; définissez searchableEmbeddingColumn pour utiliser une autre colonne.
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.
Configuration de Turbopuffer
Turbopuffer nécessite des attributs cherchables et un schéma pour chaque modèle. Définissez-les dans le tableaumodel-settings de config/scout.php.
searchable-attributes sont des poids BM25 relatifs. Dans l’exemple, une correspondance dans le titre pèse trois fois plus qu’une correspondance dans le corps. Pour activer la recherche sémantique, ajoutez un réglage embedding et un schéma vectoriel, et renvoyez le texte source ou un tableau d’embedding précalculé depuis la méthode toSearchableEmbedding du modèle.
toSearchableEmbedding sont inutiles : incluez l’attribut source dans le retour de toSearchableArray et configurez le driver d’embedding ainsi.
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, Turbopuffer. 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 :
Recherche sémantique
Les moteurs database, Meilisearch, Typesense et Turbopuffer prennent en charge la recherche sémantique, qui recherche les enregistrements d’après le sens de la requête. Après avoir configuré les embeddings du moteur choisi, ajoutez la méthodesemantic à la requête de recherche. Lorsque Scout génère les embeddings, la recherche sémantique et hybride nécessite le Laravel AI SDK. Si vous utilisez les embeddings natifs de Typesense, ceux de Turbopuffer ou un vecteur de requête précalculé, le Laravel AI SDK n’est pas requis.
hybrid. Ses arguments contrôlent les poids relatifs des résultats textuels et sémantiques.
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.