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 :

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.
La méthode 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 :
Convertissez la clé primaire en string et 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églage embedding 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.
La méthode 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éfinissez SCOUT_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’extension pgvector. 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.
Définissez une méthode 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 tableau model-settings de config/scout.php.
Les valeurs numériques de 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.
Pour utiliser les embeddings natifs de Turbopuffer, le Laravel AI SDK et 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). 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, Turbopuffer. 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 :

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éthode semantic à 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.
Selon le moteur choisi, vous pouvez indiquer un seuil de similarité minimal.
Pour combiner recherche full text et recherche sémantique, utilisez la méthode hybrid. Ses arguments contrôlent les poids relatifs des résultats textuels et sémantiques.

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 11 septembre 2026