Introduction
Il existe plusieurs manières d’ajouter la recherche à une application. Laravel fournit des outils intégrés couvrant la correspondance par mots-clés jusqu’à la recherche sémantique via IA, sans dépendance externe.Comparatif
| Fonctionnalité | Service externe | Caractéristiques |
|---|---|---|
whereFullText | Non | Index full text natif de MariaDB / MySQL / PostgreSQL |
whereVectorSimilarTo | Non (PostgreSQL + pgvector) | Similarité sémantique. Nécessite l’AI SDK |
Reranking | Fournisseur IA | Re-classe un ensemble de résultats |
| Laravel Scout | Non (moteur database) / au choix | Synchronisation automatique d’index pour modèles Eloquent |
Recherche full text
LIKE couvre les recherches simples mais ignore la langue. La recherche full text utilise un index dédié pour prendre en compte les frontières de mots, les variations lexicales et le score de pertinence.
MariaDB, MySQL et PostgreSQL le supportent nativement.
Ajouter l’index
Créez l’index dans la migration.Recherche full text en japonais / autres langues asiatiques
Sous MySQL, la recherche japonaise est délicate. AWS RDS ne supporte que le parser N-gram, sans plugin de segmentation morphologique (MeCab), ce qui limite. Postgres a aussi un support limité pour ces langues. Pour une meilleure précision, envisagez Meilisearch ou Typesense.
Sous MySQL, la recherche japonaise est délicate. AWS RDS ne supporte que le parser N-gram, sans plugin de segmentation morphologique (MeCab), ce qui limite. Postgres a aussi un support limité pour ces langues. Pour une meilleure précision, envisagez Meilisearch ou Typesense.
Exécuter une requête
AvecwhereFullText, Laravel génère le SQL approprié (MATCH(...) AGAINST(...) sous MySQL, to_tsvector(...) @@ plainto_tsquery(...) sous Postgres).
Sous MariaDB/MySQL, les résultats sont automatiquement triés par pertinence. Sous PostgreSQL,
whereFullText filtre uniquement — utilisez le moteur database de Scout pour un tri automatique.orWhereFullText ajoute une condition OR. Voir la documentation Query Builder.
Recherche sémantique / vectorielle
Le full text dépend des mots-clés. La recherche vectorielle utilise des embeddings IA qui représentent le sens du texte sous forme de vecteurs numériques et retrouve des éléments sémantiquement proches. Exemple : « best wineries in Napa Valley » retrouve un article intitulé « Top Vineyards to Visit », même sans mot en commun.Nécessite le Laravel AI SDK. Supporte PostgreSQL (extension
pgvector) et MongoDB (via le package MongoDB). Toutes les bases Postgres de Laravel Cloud sont pré-équipées de pgvector.Générer des embeddings
Un embedding est un tableau numérique de haute dimension (des centaines à des milliers). Utilisez la méthodetoEmbeddings de Stringable.
Embeddings est plus efficace (un seul appel API).
Stocker et indexer
Utilisez une colonnevector en migration. Précisez dimensions selon votre fournisseur (par ex. text-embedding-3-small d’OpenAI : 1 536). index() crée un index HNSW pour accélérer.
embedding en array pour la conversion automatique.
Recherche par similarité
whereVectorSimilarTo compare par similarité cosinus, filtre selon minSimilarity (0.0 → 1.0, 1.0 = correspondance exacte) et trie par pertinence.
whereVectorDistanceLessThan, selectVectorDistance, orderByVectorDistance. Voir Query Builder et AI SDK.
Reranking
Le reranking utilise un modèle IA pour reclasser des résultats selon la requête. Contrairement à la recherche vectorielle, aucun embedding n’est pré-calculé — s’applique à n’importe quel ensemble de textes. Pattern efficace : filtrer rapidement via full text, puis reranker avec l’IA — la rapidité de la base et la précision de l’IA.rerank : indiquez un champ (ou closure) et la requête.
Laravel Scout
Les approches précédentes s’appuient sur des méthodes du Query Builder. Laravel Scout est différent : ajoutez le traitSearchable à un modèle Eloquent, et Scout synchronise l’index automatiquement à la création/mise à jour/suppression.
Moteur database
Le moteurdatabase intégré applique full text + LIKE sur la base existante — sans service externe.
Définissez toSearchableArray ; personnalisez la stratégie via des attributs PHP.
| Attribut | Stratégie |
|---|---|
SearchUsingFullText | Index full text (MATCH...AGAINST / to_tsvector) |
SearchUsingPrefix | Préfixe (example%) |
| Aucun | Joker avant/après (%example%) |
search. Sous PostgreSQL, le moteur database trie aussi par pertinence.
Moteurs tiers
Scout supporte Algolia, Meilisearch, Typesense — tolérance aux fautes, facettes, géo-recherche, ranking personnalisé. L’API unifiée facilite la migration ultérieure du moteur database vers un moteur tiers.La plupart des applications n’ont pas besoin d’un moteur externe. Les approches présentées ici couvrent la majorité des cas.
Combiner les techniques
Ces approches ne s’excluent pas mutuellement.Full text + reranking
Filtrer rapidement via full text, puis reclasser sémantiquement via IA.Vectorielle + filtres classiques
Croisez similarité vectorielle et clauseswhere traditionnelles.
Pages associées
Laravel Scout
Synchronisation automatique d’index via le trait Searchable.
Laravel AI SDK
Configurez le SDK IA pour embeddings et reranking.
Query Builder
Détail de whereFullText, whereVectorSimilarTo, etc.
Migrations
Création d’index full text et de colonnes vector.