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.Recherche plein texte PostgreSQL
Avec PostgreSQL, Scout peut interroger une colonnetsvector stockée pour effectuer une recherche plein texte pondérée et indexée. Commencez par utiliser la méthode searchable dans une migration pour ajouter la colonne générée search_vector et son index GIN.
A (le plus élevé) à D (le plus faible). Vous pouvez aussi passer une liste de noms de colonnes sans poids, comme ['title', 'body']. Dans ce cas, chaque colonne reçoit le poids par défaut D. PostgreSQL met automatiquement à jour la colonne générée lorsque les colonnes sources changent.
Ensuite, appliquez l’attribut SearchUsingFullText à la méthode toSearchableArray du modèle et définissez l’option vector sur true.
LIKE sur d’autres attributs peut empêcher PostgreSQL d’utiliser l’index GIN.
La méthode searchable accepte aussi une configuration de recherche textuelle, des colonnes pour un index trigram et un nom personnalisé pour la colonne vectorielle.
dropSearchable avec les mêmes colonnes trigram et le même nom de colonne vectorielle.
Options de recherche PostgreSQL
Vous pouvez personnaliser la recherche plein texte PostgreSQL avec le second argument de l’attributSearchUsingFullText.
Le mode
plain recherche tous les termes de la requête, et le mode phrase correspond lorsque les termes apparaissent dans l’ordre. Le mode websearch prend en charge la syntaxe de recherche web, comme les phrases entre guillemets et les termes exclus, et le mode raw accepte la syntaxe tsquery de PostgreSQL. Lorsque vous interrogez une colonne vectorielle stockée, language doit correspondre à la configuration de recherche textuelle utilisée pour générer la colonne.
Pour activer la tolérance aux fautes de frappe, indiquez les colonnes trigram à la fois dans la migration et dans les options de l’attribut.
trigram_mode sur blend, les correspondances trigram sont incluses aux côtés des correspondances plein texte et la similarité trigram est prise en compte dans le classement par pertinence.
Pour une recherche donnée, vous pouvez remplacer les options mode, language, rank, trigram et trigram_mode avec la méthode options.
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.