Skip to main content

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


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.
Full text : MariaDB, MySQL, PostgreSQL.

Ajouter l’index

Créez l’index dans la migration.
Sous PostgreSQL, précisez la langue.
Voir Migrations pour plus de détails.
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.

Exécuter une requête

Avec whereFullText, Laravel génère le SQL approprié (MATCH(...) AGAINST(...) sous MySQL, to_tsvector(...) @@ plainto_tsquery(...) sous Postgres).
Pour un index composé :
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éthode toEmbeddings de Stringable.
Pour plusieurs textes à la fois, la classe Embeddings est plus efficace (un seul appel API).
Voir la documentation AI SDK.

Stocker et indexer

Utilisez une colonne vector 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.
Castez embedding en array pour la conversion automatique.
Voir Migrations pour les détails.

Recherche par similarité

whereVectorSimilarTo compare par similarité cosinus, filtre selon minSimilarity (0.0 → 1.0, 1.0 = correspondance exacte) et trie par pertinence.
En passant une chaîne, Laravel génère lui-même l’embedding : idéal pour une requête utilisateur brute.
Pour un contrôle fin : 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.
Les collections Laravel exposent une macro rerank : indiquez un champ (ou closure) et la requête.
Voir la documentation AI SDK.

Laravel Scout

Les approches précédentes s’appuient sur des méthodes du Query Builder. Laravel Scout est différent : ajoutez le trait Searchable à un modèle Eloquent, et Scout synchronise l’index automatiquement à la création/mise à jour/suppression.

Moteur database

Le moteur database intégré applique full text + LIKE sur la base existante — sans service externe. Définissez toSearchableArray ; personnalisez la stratégie via des attributs PHP.
Les colonnes marquées SearchUsingFullText doivent avoir un index full text au préalable.
Recherche via 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.
Voir Laravel Scout.

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 clauses where 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.
Dernière modification le 13 juillet 2026