Le WordPress d'aujourd'hui, décodé pour les développeurs

E-commerce

Meilisearch derrière WooCommerce : une alternative à Algolia pour petit budget

Une petite boutique veut une recherche produit pertinente sans le coût mensuel d'un service propriétaire. Tutoriel d'intégration de Meilisearch, auto-hébergé, avec WooCommerce.

Par WordPress Développement • 17 août 2024 • 4 min de lecture • Aucun commentaire
Meilisearch derrière WooCommerce : une alternative à Algolia pour petit budget

Combien coûte réellement une recherche produit pertinente quand le budget mensuel se compte en dizaines d’euros, pas en centaines ? C’est la question qui se pose pour une petite boutique dont le catalogue dépasse quelques centaines de références : la recherche native de WordPress devient insuffisante, mais les services de recherche propriétaires facturés à l’usage représentent souvent un coût disproportionné par rapport au chiffre d’affaires. Ce tutoriel ne traite pas la configuration d’Algolia elle-même, mais présente Meilisearch, un moteur open source auto-hébergeable, comme alternative directe pour ce cas de figure.

Installer Meilisearch sur un petit serveur

Meilisearch se distribue sous forme d’un binaire unique, sans dépendance lourde comme une JVM, ce qui le rend particulièrement adapté à un hébergement modeste. L’installation via Docker reste la méthode la plus simple à maintenir dans la durée :

docker run -d --name meilisearch \
  -p 7700:7700 \
  -e MEILI_MASTER_KEY="cle_maitre_secrete" \
  -v /donnees/meilisearch:/meili_data \
  getmeili/meilisearch:v1.8

Une fois lancé, le service expose une API REST simple, avec un tableau de bord d’administration accessible directement sur le port exposé, utile pour vérifier visuellement le contenu d’un index sans écrire de requête.

Créer l’index et définir les attributs de recherche

L'essentiel à retenir : Meilisearch tourne sur un petit serveur, sans coût récurrent lié au volume de recherches ; L'indexation s'appuie uniquement sur les fonctions natives WooCommerce ; La tolérance aux fautes de frappe est activée par défaut, sans configuration complexe

Contrairement à d’autres moteurs qui demandent un schéma strict, Meilisearch accepte des documents JSON sans structure préalable imposée, mais il reste utile de préciser quels attributs doivent être recherchables et lesquels servent uniquement au filtrage :

curl -X PATCH 'http://localhost:7700/indexes/produits/settings' \
  -H 'Authorization: Bearer cle_maitre_secrete' \
  -H 'Content-Type: application/json' \
  -d '{
    "searchableAttributes": ["nom", "description", "reference"],
    "filterableAttributes": ["categorie", "prix", "en_stock"]
  }'

Indexer le catalogue depuis WooCommerce

L’export s’appuie exclusivement sur des fonctions natives WooCommerce, sans extension tierce. Un script exécuté via WP-CLI parcourt le catalogue et envoie les documents par lot à l’API Meilisearch :

$produits = wc_get_products( array( 'limit' => -1, 'status' => 'publish' ) );
$documents = array();

foreach ( $produits as $produit ) {
    $documents[] = array(
        'id'          => $produit->get_id(),
        'nom'         => $produit->get_name(),
        'description' => wp_strip_all_tags( $produit->get_short_description() ),
        'reference'   => $produit->get_sku(),
        'prix'        => (float) $produit->get_price(),
        'en_stock'    => $produit->is_in_stock(),
        'categorie'   => wp_get_post_terms( $produit->get_id(), 'product_cat', array( 'fields' => 'names' ) ),
    );
}

wp_remote_post( 'http://localhost:7700/indexes/produits/documents', array(
    'headers' => array(
        'Authorization' => 'Bearer cle_maitre_secrete',
        'Content-Type'  => 'application/json',
    ),
    'body'    => wp_json_encode( $documents ),
) );

Cette indexation initiale peut ensuite se compléter d’une synchronisation planifiée via une tâche cron, ou d’un hook ciblé sur woocommerce_update_product pour maintenir un index toujours à jour sans réindexer l’intégralité du catalogue à chaque modification.

Interroger l’index depuis le frontend

La recherche se fait par une requête directe depuis le navigateur vers l’API Meilisearch, sans repasser par PHP ni par une requête MySQL. La tolérance aux fautes de frappe est activée par défaut, ce qui distingue immédiatement l’expérience de recherche par rapport à la recherche native WordPress :

GET /indexes/produits/search?q=chausure+randonee

Malgré la faute de frappe volontaire sur « chaussure » et « randonnée », Meilisearch retourne les résultats pertinents grâce à sa tolérance aux fautes intégrée nativement, un comportement qu’il faudrait reconstruire manuellement avec une simple requête SQL.

Comparaison rapide avec un service propriétaire

  • Coût : un serveur modeste suffit pour Meilisearch, contre une facturation au volume de recherches pour un service propriétaire.
  • Hébergement : les données restent entièrement sous contrôle, un point parfois important pour la conformité RGPD.
  • Maintenance : Meilisearch demande un minimum d’administration système, absente avec un service géré.

Prévoyez une sauvegarde régulière du dossier de données Meilisearch : contrairement à un service géré, la responsabilité de la sauvegarde repose entièrement sur la boutique qui l’héberge.

Pour aller plus loin

Pour une petite boutique avec un budget d’infrastructure limité, Meilisearch offre l’essentiel de ce qu’apporte un service de recherche propriétaire — pertinence, tolérance aux fautes, filtres à facettes — sans coût récurrent lié au volume. Le seul investissement réel est le temps de maintenance système, largement compensé par l’indépendance vis-à-vis d’un service tiers facturé à l’usage.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi