Intégrer Elasticsearch dans PrestaShop : retour d’expérience sur 160 000 produits et plus d’un million de compatibilités moto
Le contexte : un catalogue hors norme
Notre client, spécialiste de la vente en ligne de pièces détachées et d’accessoires moto, nous a contactés avec un défi bien particulier : son site PrestaShop devenait inutilisable dès qu’un client tentait de faire une recherche.
Les chiffres parlaient d’eux-mêmes :
- 160 000 références produits actives dans le catalogue
- Plus d’un million de lignes de compatibilité liant chaque pièce à des modèles de motos précis (marque, modèle, année, cylindrée)
- Des temps de réponse dépassant les 8 à 12 secondes sur les recherches textuelles
- Une base MySQL saturée sur les requêtes
FULLTEXTet les jointures de compatibilité
Le moteur de recherche natif de PrestaShop, même optimisé, n’était tout simplement pas conçu pour ce volume. Il fallait une solution industrielle.
Pourquoi Elasticsearch ?
Elasticsearch est un moteur de recherche et d’analyse distribué, construit sur Apache Lucene. Il est conçu pour indexer et interroger des volumes massifs de données en temps quasi réel. Dans le domaine de l’e-commerce, il est devenu la référence pour les catalogues à grande échelle.
Ses atouts dans notre cas d’usage :
Pertinence et scoring. Elasticsearch calcule un score de pertinence pour chaque document retourné, en tenant compte de la fréquence des termes, de la proximité, et de règles métier personnalisées. Résultat : une pièce dont le titre correspond exactement à la requête remonte avant une pièce qui la mentionne seulement en description.
Recherche full-text avancée. Les analyseurs linguistiques (stemming, synonymes, tolérance aux fautes de frappe via le fuzzy matching) permettent à un client qui tape « amortisseur avant gsxr 750 2019 » de trouver les bons résultats même s’il omet un espace ou fait une coquille.
Filtres et agrégations en temps réel. Les facettes (marque, type de pièce, fourchette de prix, compatibilité véhicule) sont calculées côté Elasticsearch en une seule requête, sans aller-retour MySQL supplémentaire.
Scalabilité horizontale. L’index peut être distribué sur plusieurs nœuds et les requêtes parallélisées. La montée en charge est linéaire.
Architecture du module ecelasticsearch
Plutôt que d’adapter un module générique du marché — souvent trop rigide pour des données métier aussi spécifiques — nous avons développé un module sur mesure.
La structure de l’index
La première décision critique était la structure du mapping Elasticsearch. Nous avons choisi de dénormaliser les données : chaque document dans l’index représente un produit PrestaShop complet, avec toutes ses informations embarquées, y compris la liste des véhicules compatibles.
Le choix du type nested pour les compatibilités est essentiel : il préserve la relation entre les champs d’un même véhicule. Sans ce type, un filtre sur « Honda » + « 2019 » pourrait retourner une pièce compatible Honda 2018 et une autre compatible Kawasaki 2019, car Elasticsearch aurait aplati les tableaux.
L’analyseur personnalisé
Le domaine de la moto a ses propres particularités linguistiques : abréviations (« gsxr », « cbr », « yzf »), chiffres collés aux lettres (« R1200GS », « MT-07 »), caractères spéciaux. Nous avons défini un analyseur dédié.
Ce tokenizer découpe aussi sur les transitions chiffre/lettre, ce qui permet à « R1200GS » d’être tokenisé en ["r", "1200", "gs"] et donc retrouvable par « R 1200 GS » ou « 1200 GS ».
L’indexation : full et incrémentale
Avec 160 000 produits, une réindexation complète dure environ 20 minutes sur notre infrastructure. C’est acceptable pour une opération programmée la nuit, mais inenvisageable à chaque modification de produit.
Indexation complète (batch)
Le script de réindexation full utilise le bulk API d’Elasticsearch qui permet d’envoyer plusieurs milliers de documents en une seule requête HTTP.
Le mécanisme d’alias avec swap atomique est crucial : pendant la réindexation, les recherches continuent à utiliser l’ancien index. Le basculement vers le nouvel index se fait en une opération sans interruption de service.
Indexation incrémentale (hooks)
Pour chaque modification de produit, de stock ou de prix, PrestaShop déclenche des hooks que le module intercepte pour mettre à jour seulement les documents concernés.
La gestion des compatibilités : le vrai défi
La donnée de compatibilité (quelle pièce va sur quel véhicule) est stockée dans une table dédiée en base MySQL, fruit d’imports réguliers depuis les catalogues fournisseurs TecDoc ou ACES. Avec plus d’un million de lignes, la jointure MySQL à la volée était catastrophique.
Dans l’index Elasticsearch, nous avons intégré ces données directement dans chaque document produit. La construction du document se fait via une requête MySQL optimisée avec jointure, exécutée une seule fois à l’indexation.
Cette requête, sur un index de 160 000 documents avec un million de compatibilités dénormalisées, répond en moins de 80 ms en production. Contre 8 à 12 secondes côté MySQL.
Résultats en production
Après déploiement sur l’infrastructure du client (cluster Elasticsearch 3 nœuds, 16 Go de RAM par nœud) :
| Indicateur | Avant (MySQL natif) | Après (Elasticsearch) |
|---|---|---|
| Temps de réponse moyen | 8–12 secondes | 60–120 ms |
| Taux de rebond sur la recherche | 47 % | 18 % |
| Taux de conversion post-recherche | 2,1 % | 5,8 % |
| Erreurs timeout | Fréquentes | Nulles |
La pertinence des résultats a également été mesurée qualitativement par l’équipe du client sur un panel de 200 requêtes types : le taux de satisfaction est passé de 61 % à 94 %.
Conclusion
Ce projet illustre bien les limites du moteur de recherche natif de PrestaShop dès que le catalogue dépasse quelques dizaines de milliers de références ou que des données métier complexes — ici les compatibilités véhicule — entrent dans l’équation de recherche.
Elasticsearch n’est pas une solution plug-and-play : son intégration pertinente demande de maîtriser le mapping, les analyseurs linguistiques, la stratégie d’indexation, et la construction des requêtes DSL. Mais une fois en place, les gains sont massifs et durables.
Chez Ether Création, ce type de développement sur mesure est au cœur de notre expertise PrestaShop. Si votre catalogue commence à peser sur les performances de votre moteur de recherche, contactez-nous pour en discuter.