Elasticsearch Search & Faceted Navigation. Ce module remplace la recherche SQL lente de PrestaShop par un véritable moteur de recherche, Elasticsearch, OpenSearch ou Meilisearch, et ajoute une navigation à facettes moderne et entièrement configurable. Les clients bénéficient d’une saisie semi-automatique instantanée avec vignettes et prix, de résultats tolérants aux fautes de frappe, et d’une expérience « Filtres » claire dans un panneau de filtres modal moderne. Les prix affichés sont toujours les prix natifs exacts pour chaque groupe de clients et chaque devise. Aucun serveur externe n’est nécessaire pour démarrer : dès que son interrupteur principal est activé, il fonctionne avec la recherche native de PrestaShop, et vous pouvez connecter un moteur de recherche dès que vous êtes prêt.
Ce module remplace la recherche SQL lente de PrestaShop par un véritable moteur de recherche, Elasticsearch, OpenSearch ou Meilisearch: et ajoute une navigation à facettes moderne et entièrement configurable. Les clients bénéficient d’une saisie semi-automatique instantanée avec vignettes et prix, de résultats tolérants aux fautes de frappe, et d’une expérience « Filtres » claire dans un panneau de filtres modal moderne. Les prix affichés sont toujours les prix natifs exacts pour chaque groupe de clients et chaque devise. Aucun serveur externe n’est nécessaire pour démarrer : dès que son interrupteur principal est activé, il fonctionne avec la recherche native de PrestaShop, et vous pouvez connecter un moteur de recherche dès que vous êtes prêt.
1. Installation
- Dans le back office, allez dans Modules → Gestionnaire de modules → Ajouter un module et sélectionnez le fichier ZIP du module.
- Une fois installé, cliquez sur Configurer pour ouvrir le tableau de bord du module.
- Le module s’installe par défaut sur le moteur « Natif (PrestaShop) », avec l’interrupteur principal Activer la recherche en front-office sur Non : rien ne change donc pour les visiteurs tant que vous ne l’avez pas décidé. Réglez-le sur Oui dans l’onglet Réglages de recherche et enregistrez : la recherche, les filtres et la saisie semi-automatique fonctionnent alors tout de suite directement depuis votre catalogue, sans serveur externe. Le module requiert PrestaShop 1.7.7 ou plus récent et PHP 7.1 ou plus récent.
.local, .test, localhost) sont toujours autorisés. Lorsqu’une nouvelle version est disponible, elle s’affiche directement dans le module. Si le serveur web ne peut pas écrire dans le dossier du module, un avertissement le signale sur la page qui s’ouvre avec Configurer, afin que vous puissiez corriger les permissions avant qu’une mise à jour n’échoue.Si, à la place de la confirmation, vous lisez « Upload failed », PrestaShop a peut-être désactivé le module sans vous le dire : vos réglages et vos données restent en place. Comment mettre à jour un module, et que faire en cas de « Upload failed ».
2. Choisir un moteur de recherche
Ouvrez l’onglet Connexions et choisissez votre Moteur. Tout le reste du module communique avec le moteur via une seule couche d’abstraction, de sorte que le front office se comporte de la même manière quel que soit le backend choisi.
Options de moteur
- Natif (PrestaShop): pas de moteur externe et rien à indexer. Le module recherche et filtre directement dans la base de données de PrestaShop. Utilisez cette option pour être opérationnel tout de suite et connecter un moteur plus tard ; la boutique n’est jamais laissée sans recherche fonctionnelle.
- Elasticsearch: prend en charge les versions majeures 6, 7, 8 et 9 avec détection automatique de version.
- OpenSearch: détecté automatiquement et traité comme un cluster moderne sans typage, quelle que soit sa version 1.x/2.x/3.x.
- Meilisearch: une alternative légère et facile à héberger ; vos champs indexables, facettes, synonymes, mots vides et tolérance aux fautes de frappe sont automatiquement mappés vers Meilisearch.
Paramètres de connexion
- Hôte: l’URL complète de votre moteur (elle peut inclure un préfixe de chemin, par ex.
https://cluster.provider.com/my-space). - Chemin de base: un préfixe de chemin optionnel ajouté devant chaque requête, pour un espace de recherche loué sur des instances partagées.
- Préfixe d’index: un espace de noms qui isole vos index, permettant à plusieurs boutiques de partager un même moteur en toute sécurité. Une nouvelle installation reçoit son propre préfixe aléatoire (
ps_cll_suivi de six caractères) ; une installation mise à jour depuis une version antérieure conserve le sien. - Authentification: pour Elasticsearch/OpenSearch : HTTP Basic ou clé API ; pour Meilisearch : une clé maître ou une clé à portée limitée de type Bearer. Une fois enregistrés, un mot de passe ou une clé API ne sont plus jamais affichés dans la page : laissez le champ vide pour les conserver (pour le même serveur), saisissez-en un nouveau pour les remplacer, ou cochez la case pour les supprimer.
- Tester la connexion: vérifie que le moteur est accessible et indique sa version détectée.

3. Comportement de la recherche
Prendre en charge la recherche du site
Activez Prendre en charge la recherche du site pour que chaque recherche et chaque liste de catégorie soit servie par le moteur via le fournisseur de produits natif de PrestaShop, sans aucune modification du thème. Si le moteur devient inaccessible, ou répond à une liste par une erreur, le module bascule automatiquement vers la recherche native afin que la boutique n’affiche jamais d’erreur. Un moteur qui ne répond plus est laissé de côté pendant 30 secondes avant une seule vérification rapide, de sorte qu’un moteur lent ou bloqué ne ralentit jamais les pages de la boutique ; les modifications de produits qu’il n’a pas reçues entre-temps sont envoyées par l’appel cron suivant. Si ps_facetedsearch est encore actif, la page de configuration du module vous avertit (avec un bouton « Ne plus afficher cet avertissement » pour une boutique qui le garde actif volontairement), car il est normalement préférable de n’avoir qu’un seul module de facettes actif.
Groupes de clients, prix masqués et codes exacts
Les produits et catégories réservés à certains groupes de clients restent réservés : le module applique la règle de PrestaShop (un produit n’est visible que si l’une de ses catégories actives est ouverte à l’un des groupes du client) aux résultats de recherche, aux filtres et à leurs compteurs, à la saisie semi-automatique, aux raccourcis par catégorie, aux produits mis en avant et à la page sans résultat. Les prix suivent aussi PrestaShop : une suggestion n’affiche un prix, et le filtre de prix n’apparaît, que si PrestaShop lui-même afficherait les prix à ce client. Une recherche qui correspond exactement à une référence, un EAN-13, un UPC ou un MPN ne liste que les produits qui le portent.
Pertinence et réglages
Le panneau des paramètres de recherche vous permet d’ajuster la pertinence sans toucher au code :
- Pondération des champs: l’importance du nom, de la référence, de la description, etc. dans le calcul du score.
- Type de correspondance et opérateur: la stratégie multi_match et si les mots sont combinés avec AND ou OR.
- Fuzziness et minimum-should-match: le degré de tolérance aux fautes de frappe et le nombre de mots devant correspondre.
- Longueur minimale des mots et le périmètre des champs indexables par type de document. Un terme plus court n’est pas ignoré : les termes de deux lettres comme « tv » sont recherchés de manière exacte, sans tolérance aux fautes de frappe.
- Analyse linguistique: synonymes, mots vides, racinisation (stemmer) par langue (avec exclusions), élision, mise en minuscules et correspondance infixe (n-gramme) pour les mots partiels.

4. Navigation à facettes
La navigation à facettes est une expérience moderne en AJAX, sans rechargement de page, avec un mode barre latérale classique disponible en alternative (option Facet UI : modal ou sidebar).
Le panneau de filtres modal moderne
- Au-dessus de la grille de produits se trouvent un bouton « Filtres », le nombre de résultats en temps réel et des puces amovibles pour chaque valeur appliquée (« Tout effacer » les supprime toutes).
- Un clic sur Filtres ouvre une fenêtre modale à deux volets : les noms des filtres à gauche (avec un badge quand un filtre est utilisé), les valeurs du filtre sélectionné à droite, et un bouton dynamique « Afficher N résultats » dans le pied de la fenêtre.
- Les filtres comportant de nombreuses valeurs sont regroupés de A à Z avec une zone de « recherche dans ce filtre » ; les couleurs s’affichent sous forme de pastilles ; le prix propose des champs min/max ainsi qu’un curseur à double poignée.
- Sur mobile, la fenêtre modale est en plein écran : touchez un nom de filtre pour accéder à ses valeurs, utilisez la flèche retour pour revenir en arrière, et confirmez avec la barre fixe « Afficher N résultats » en bas de l’écran.
- Tout se met à jour en AJAX avec des URL partageables (les boutons précédent/suivant fonctionnent), et il existe un repli sans JavaScript car chaque contrôle est un véritable élément de formulaire.
Configurer chaque facette
Pour chaque facette, vous contrôlez : activation/désactivation, ordre, libellé par langue, type d’affichage (case à cocher, bouton radio, liste déroulante, pastille de couleur pour les groupes de couleurs, ou un curseur pour le prix, les dimensions et les caractéristiques numériques), mode ET/OU, l’affichage ou non des compteurs, l’état replié, une limite de valeurs avec « afficher plus », et le masquage si vide. Sources disponibles : catégories, marques, caractéristiques, déclinaisons, prix, disponibilité, nouveauté, promotion et état. Les facettes peuvent également être affichées sur la page de résultats de recherche et, avec un interrupteur, sur les pages marque, fournisseur, nouveautés, promotions et meilleures ventes, pas seulement sur les catégories. Sur Elasticsearch et OpenSearch, chaque groupe de caractéristiques ou de déclinaisons est compté avec les sélections des autres groupes appliquées : choisir une couleur met aussi à jour les nombres affichés à côté des tailles (sur le moteur natif et sur Meilisearch, chaque groupe est encore compté séparément).

Modèles de filtres par catégorie Filters Pro
Un modèle de filtres est une configuration de facettes nommée et réutilisable que vous pouvez assigner à une ou plusieurs catégories, afin que différentes catégories puissent exposer un jeu de filtres différent et réordonné. Dans l’onglet Modèles de filtres, vous créez un modèle avec le même éditeur de facettes que la configuration globale, plus une arborescence de catégories et une option « appliquer aussi aux sous-catégories ». La configuration globale des Facettes constitue le modèle par défaut: le repli pour toute catégorie sans modèle propre, ainsi que pour la page de recherche.

5. Saisie semi-automatique
Au fur et à mesure que le client tape, le module suggère des produits, catégories, marques et pages CMS: chacun étiqueté par type, avec des vignettes produit et le bon prix natif (seulement si PrestaShop afficherait les prix à ce client), et tolérant aux fautes de frappe afin que les petites erreurs trouvent quand même une correspondance. Deux présentations sont disponibles (Style de saisie semi-automatique dans l’onglet Sortie) :
- Liste déroulante: un panneau de suggestions qui s’ouvre sous la barre de recherche. Le style classique et compact.
- Superposition de recherche plein écran: une grande barre de recherche fixe avec des résultats en plein écran, pour une expérience audacieuse centrée sur la recherche.

6. Des prix justes
Des prix corrects par groupe et par devise
Le prix qu’un client voit est toujours le prix natif de PrestaShop. Les prix sont indexés par groupe de clients × devise, tiennent compte des specific_price et de la taxe par pays, et la bonne valeur est sélectionnée au moment de la requête. Cela signifie que la facette de prix optionnelle et le tri par prix sont exacts pour chaque acheteur, un groupe grossiste et un groupe détail voient et trient chacun selon leurs propres prix.
Prix personnalisés pour le B2B Advanced
Dans l’onglet Advanced, vous pouvez activer les prix personnalisés. Pour les clients B2B disposant d’une liste de prix individuelle (un specific_price assigné au client), le tri et le filtrage par prix peuvent utiliser leur prix personnel exact plutôt que le prix du groupe. Un plafond configurable (fixe, ou automatique selon l’espace disque libre du moteur) limite le nombre de clients pour lesquels ce calcul est précalculé, et un avis optionnel par langue peut être affiché à ces acheteurs.

7. Pages de filtres SEO
Les combinaisons de filtres étant potentiellement infinies, elles inonderaient Google ; c’est pourquoi, par défaut, chaque URL filtrée est servie en noindex,follow. L’onglet Pages de filtres SEO vous permet de faire l’inverse pour les combinaisons qui comptent : mettre en liste blanche une sélection précise (par exemple catégorie + marque + couleur) en tant que page de destination indexable avec un meta titre, une meta description, un H1 et un texte d’introduction personnalisés par langue.
- Une page correspondante est forcée en
indexet reçoit une URL canonique auto-référencée vers l’URL filtrée, afin de pouvoir réellement se positionner. - Votre H1 et votre introduction personnalisés s’affichent au-dessus de la liste de produits ; le champ H1 prend l’apparence du titre de la page mais est généré comme titre de second niveau, car le thème affiche déjà le H1 propre de la page.
- Toutes les autres combinaisons filtrées restent en
noindex,follow. - La liste du back office affiche l’URL active de chaque page, prête à être soumise ou liée.

8. Analyse de la recherche
L’onglet Analyse de la recherche montre ce que les clients recherchent vraiment, enregistré à partir des véritables pages de résultats, jamais à partir des frappes de la saisie semi-automatique, et ne stockant que le texte de la requête (aucune donnée personnelle). Choisissez une plage de dates (7 / 30 / 90 derniers jours) et consultez des indicateurs clés (recherches totales, requêtes uniques, nombre et % de résultats nuls), un tableau des recherches les plus fréquentes et, surtout, un tableau des recherches sans résultat: les recherches n’ayant rien trouvé, autrement dit des ventes perdues. Chaque ligne sans résultat dispose d’un raccourci « Ajouter un synonyme » en un clic pour corriger immédiatement le problème. La journalisation peut être désactivée et les anciennes lignes sont supprimées automatiquement après une période de rétention configurable. Un terme ne compte qu’une fois par visiteur et par jour, et un visiteur enregistre au plus 30 recherches par jour : un seul visiteur ne peut donc pas gonfler les chiffres.

9. Réindexation et cron
Le moteur a besoin d’un index de votre catalogue. Le module indexe les produits, catégories, marques et pages CMS, chacun dans son propre index, et les maintient à jour en direct au fur et à mesure que vous enregistrez, ajoutez ou supprimez des produits et que le stock évolue.
- Assistant de réindexation: une réindexation guidée, par lots et reprenable, avec une barre de progression. Lancez-le après la première connexion au moteur, après un changement de moteur, après une modification des paramètres de l’analyseur, ou après un changement des groupes de clients autorisés à voir une catégorie. Un seul index est reconstruit à la fois, de sorte que le cron et le bouton ne défont jamais le travail l’un de l’autre.
- URL cron: une URL protégée par jeton que vous pouvez appeler depuis une tâche planifiée (ou en CLI) pour maintenir automatiquement l’index à jour ; elle envoie aussi les modifications de produits mises en file d’attente pendant que le moteur ne répondait pas, et purge les anciennes lignes d’analyse.
- Supprimer les données indexées: vide les index du moteur lorsque vous souhaitez une reconstruction propre.

10. Multiboutique et hébergement partagé
Multiboutique
Les paramètres de connexion et de moteur sont définis par boutique. Dans un contexte « toutes les boutiques », ils sont enregistrés globalement ; dans un contexte à boutique unique, ils sont enregistrés pour cette boutique, avec un repli global. Cela signifie que différentes boutiques peuvent pointer vers différents moteurs ou clusters, tandis qu’une installation à boutique unique se comporte exactement comme avant.
Hébergement partagé / espace de recherche loué
Vous n’avez pas besoin de votre propre cluster dédié. Pointez l’Hôte vers un point d’accès partagé avec un préfixe de chemin, définissez le Chemin de base et un Préfixe d’index (espace de noms), puis ajoutez la clé API du fournisseur. Chaque requête est limitée à votre préfixe, de sorte que vos données restent isolées sur une instance partagée, et cela fonctionne de la même manière avec Elasticsearch, OpenSearch et Meilisearch.
11. FAQ
Ai-je besoin d’Elasticsearch pour démarrer ?
Non. Le module s’installe sur le moteur « Natif (PrestaShop) » : réglez « Activer la recherche en front-office » sur Oui et la recherche, les filtres et la saisie semi-automatique fonctionnent tout de suite directement depuis votre catalogue, sans serveur externe. Connectez Elasticsearch, OpenSearch ou Meilisearch dès que vous êtes prêt.
Que se passe-t-il si mon moteur de recherche tombe en panne ?
Le module bascule automatiquement vers la recherche native, de sorte que les clients peuvent toujours effectuer une recherche : la boutique n’affiche jamais d’erreur. Un serveur qui ne répond plus est laissé de côté pendant 30 secondes avant une seule vérification rapide, il ne ralentit donc pas les pages, et les modifications de produits qu’il n’a pas reçues sont envoyées par l’appel cron suivant.
Les prix affichés aux clients sont-ils corrects ?
Oui. Le prix affiché est toujours le prix natif de PrestaShop. Le moteur n’est utilisé que pour filtrer et trier, à l’aide des prix indexés par groupe de clients et par devise (et, en option, du prix personnel de chaque client B2B).
Y aura-t-il un conflit avec ps_facetedsearch ?
Il est normalement préférable de n’avoir qu’un seul module de facettes actif. La page de configuration du module vous avertit si ps_facetedsearch est encore actif, avec un bouton Désactiver ; si vous le gardez volontairement, « Ne plus afficher cet avertissement » masque le rappel.
Différentes catégories peuvent-elles afficher des filtres différents ?
Oui. Créez des modèles de filtres et assignez-les à des catégories (en incluant éventuellement les sous-catégories). Les catégories sans modèle utilisent le modèle global par défaut.
Quel moteur dois-je choisir ?
Le moteur natif ne demande aucun serveur et c’est par lui que démarre chaque installation. Elasticsearch est le choix le plus répandu pour les grands catalogues ; OpenSearch en est un équivalent directement interchangeable. Meilisearch est le plus léger à héberger et convient parfaitement à l’hébergement partagé ou aux catalogues plus modestes.
