ITSkillsCenter
Blog

Typesense self-hosted : recherche instantanée pour e-commerce — déploiement 2026

12 min de lecture

Typesense self-hosted : recherche instantanée pour e-commerce — déploiement 2026

📍 Article principal du cluster : Moteurs de recherche self-hosted 2026 : Typesense, Quickwit, Manticore
Cet article fait partie du cluster « Search Self-Hosted ». Pour la vue d’ensemble complète — architecture, comparatif global, cas d’usage — lire d’abord le pilier avant ce tutoriel.

Introduction

Imaginez la scène : un client potentiel sur votre boutique en ligne à Dakar tape « telefoné samsung » dans la barre de recherche. Avec la solution par défaut de WooCommerce, il obtient zéro résultat — la faute à une simple faute de frappe. Il ferme l’onglet. Vous venez de perdre une vente. Maintenant imaginez qu’en moins de 50 millisecondes, votre moteur de recherche corrige automatiquement, comprend qu’il voulait « téléphone Samsung », et lui affiche immédiatement les modèles en stock avec filtres de prix en XOF. C’est exactement ce que Typesense promet — et tient.

Typesense est un moteur de recherche open source écrit en C++, conçu dès le départ pour la tolérance aux fautes de frappe et la rapidité extrême. Il positionne son index entièrement en RAM, ce qui lui permet d’atteindre des temps de réponse inférieurs à 50 ms même sur des catalogues de dizaines de milliers de produits. La grande force de Typesense face à Algolia — son concurrent le plus direct — réside dans son modèle économique : la version self-hosted est 100 % gratuite et open source sous licence Apache 2.0. Pour une PME africaine qui paierait facilement 500 USD par mois sur Algolia, passer à Typesense self-hosted représente une économie annuelle de 6 000 USD, reinvestissable dans le stock ou la logistique.

Ce tutoriel vous guide pas à pas : déploiement Docker, définition d’un schéma produits e-commerce, indexation en masse via l’API REST, configuration de la recherche typo-tolerante avec filtres facettés, intégration frontend avec InstantSearch.js, puis configuration des synonymes et du merchandising. Temps estimé : 25 minutes pour un développeur intermédiaire.

Prérequis

  • Docker Engine 24+ installé sur votre serveur (Linux Ubuntu 22.04+ recommandé) — docs.docker.com/engine/install
  • RAM disponible : 1 Go minimum pour Typesense seul (2 Go recommandés en production avec WooCommerce sur le même serveur)
  • curl ou tout client HTTP (Postman, httpie) pour tester l’API
  • Node.js 18+ pour la partie InstantSearch.js (étape 6)
  • Niveau attendu : intermédiaire — vous savez lancer un conteneur Docker et faire un appel curl
  • Temps estimé : ~25 minutes pour les étapes 1 à 7

Étape 1 — Typesense vs Meilisearch vs Algolia : choisir en connaissance de cause

Avant d’installer quoi que ce soit, il est utile de comprendre pourquoi Typesense plutôt qu’une autre solution. Les trois acteurs principaux du marché de la recherche applicative répondent à des besoins différents, et la confusion est fréquente chez les développeurs qui découvrent l’écosystème.

Algolia est le pionnier du « search-as-a-service ». Sa force est l’expérience clé en main : tableau de bord riche, analytics intégrées, réseau de distribution mondial (DSN), A/B testing natif. Sa faiblesse est le prix : les catalogues e-commerce dépassant 100 000 produits ou 1 million de recherches mensuelles font rapidement grimper les factures à 300-600 USD par mois, un tarif hors de portée pour la majorité des PME africaines. Algolia est un SaaS propriétaire — vous n’avez aucun contrôle sur l’infrastructure.

Meilisearch est l’alternative open source la plus populaire en France. Écrit en Rust, il utilise une base LMDB pour stocker son index sur disque plutôt qu’en RAM, ce qui le rend moins gourmand en mémoire mais légèrement plus lent que Typesense pour de très gros volumes. Sa configuration zéro est sa grande qualité : démarrer et obtenir une recherche fonctionnelle en cinq minutes est réaliste. En revanche, Meilisearch offre moins de contrôle fin sur la pertinence et les règles de curation que Typesense.

Typesense se positionne entre les deux. Son index entièrement en RAM garantit des latences sub-50ms même sur des catalogues de 100 000+ documents. Il offre une tolérance aux fautes de frappe configurable field par field, des filtres facettés performants, des règles de curation (merchandising), des synonymes, et depuis la version 26, une recherche vectorielle/sémantique native. Son seul vrai prérequis est la RAM : comptez environ 1 Go de RAM par million de documents indexés pour les champs texte standard. Pour un catalogue e-commerce de 10 000 à 100 000 produits, un VPS à 10-15 USD/mois suffit largement.

En résumé : si vous gérez un catalogue e-commerce de taille petite à moyenne, que vous cherchez une alternative gratuite à Algolia, et que vous avez un développeur capable de gérer un conteneur Docker, Typesense est le choix le plus rationnel en 2026. La version actuelle stable est la v30.1, publiée en janvier 2026, et son API de référence est documentée sur typesense.org/api.

Étape 2 — Déployer Typesense via Docker

Le déploiement le plus simple et le plus reproductible repose sur l’image Docker officielle typesense/typesense. Avant de lancer le conteneur, il faut préparer un répertoire de données persistant sur l’hôte — sans cela, toutes vos données indexées seraient perdues au redémarrage du conteneur. Créez ce dossier et définissez votre clé d’API :

# Créer le répertoire de données persistant
mkdir -p /opt/typesense/data

# Définir une clé API robuste (remplacez par une vraie valeur aléatoire)
export TYPESENSE_API_KEY="votre-cle-api-tres-secrete-min-32-chars"

Cette clé API est l’unique mécanisme d’authentification de Typesense. Elle doit être longue, aléatoire, et ne jamais être committée dans un dépôt Git. En production, stockez-la dans un gestionnaire de secrets ou une variable d’environnement chargée par votre système d’init.

Lancez maintenant le conteneur Typesense v30.1 :

docker run -d \n  --name typesense \n  --restart unless-stopped \n  -p 8108:8108 \n  -v /opt/typesense/data:/data \n  typesense/typesense:30.1 \n    --data-dir /data \n    --api-key="${TYPESENSE_API_KEY}" \n    --enable-cors

Décortiquons les options importantes. Le flag -d lance le conteneur en arrière-plan. Le port 8108 est le port HTTP par défaut de Typesense — vous pouvez le mapper sur un autre port hôte si nécessaire. Le volume -v /opt/typesense/data:/data assure la persistance des index entre les redémarrages. Le flag --enable-cors est indispensable si votre frontend InstantSearch.js interroge Typesense directement depuis le navigateur (cross-origin). Sans lui, toutes les requêtes côté client échoueront avec une erreur CORS.

Vérifiez que le serveur répond correctement avec un appel de santé :

curl http://localhost:8108/health
# Réponse attendue : {\"ok\":true}\n

\n\n

Si vous obtenez {\"ok\":true}, votre instance Typesense est opérationnelle. En cas d’erreur de connexion, vérifiez que le conteneur tourne bien avec docker logs typesense — les premières lignes de log indiqueront si la clé API est invalide ou si le port est déjà occupé.

\n\n

Pour une installation via Docker Compose — recommandée si Typesense cohabite avec d’autres services (WordPress, MySQL, Nginx) sur le même hôte — créez un fichier docker-compose.yml :

\n\n

version: '3.8'\nservices:\n  typesense:\n    image: typesense/typesense:30.1\n    container_name: typesense\n    restart: unless-stopped\n    ports:\n      - \"8108:8108\"\n    volumes:\n      - typesense_data:/data\n    command: --data-dir /data --api-key=${TYPESENSE_API_KEY} --enable-cors\n    environment:\n      - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}\n\nvolumes:\n  typesense_data:\n

\n\n

Avec cette approche, la clé API est lue depuis un fichier .env au même niveau que le Compose, ce qui évite de l’écrire en clair dans le fichier de configuration versionné.

\n\n

Étape 3 — Définir le schéma d’une collection produits e-commerce

\n\n

Dans Typesense, les données sont organisées en collections — l’équivalent des tables en SQL ou des index dans Elasticsearch. Chaque collection possède un schéma qui définit les champs indexés, leurs types, et leurs comportements (recherchable, facettable, triable). Avant d’indexer le moindre produit, vous devez créer cette collection avec un schéma adapté à votre catalogue.

\n\n

Voici un schéma réaliste pour une boutique e-commerce généraliste, avec des champs typiques : nom, description, catégorie, marque, prix, disponibilité et note moyenne. Le champ facet: true sur la catégorie et la marque activera les filtres à facettes dans l’interface de recherche.

\n\n

curl -X POST http://localhost:8108/collections \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  -d '{\n    \"name\": \"produits\",\n    \"fields\": [\n      {\"name\": \"id\",          \"type\": \"string\"},\n      {\"name\": \"nom\",         \"type\": \"string\"},\n      {\"name\": \"description\", \"type\": \"string\"},\n      {\"name\": \"categorie\",   \"type\": \"string\", \"facet\": true},\n      {\"name\": \"marque\",      \"type\": \"string\", \"facet\": true},\n      {\"name\": \"prix_xof\",    \"type\": \"float\",  \"facet\": true},\n      {\"name\": \"en_stock\",    \"type\": \"bool\",   \"facet\": true},\n      {\"name\": \"note\",        \"type\": \"float\"},\n      {\"name\": \"image_url\",   \"type\": \"string\", \"index\": false, \"optional\": true},\n      {\"name\": \"slug\",        \"type\": \"string\", \"index\": false}\n    ],\n    \"default_sorting_field\": \"note\"\n  }'\n

\n\n

Quelques points importants sur ce schéma. Le champ prix_xof est déclaré en float avec facet: true — cela permettra d’implémenter des filtres par tranche de prix (0-10 000 XOF, 10 000-50 000 XOF, etc.) dans l’interface. Le champ image_url est marqué index: false : Typesense le stockera mais ne l’indexera pas pour la recherche, ce qui économise de la RAM. Le champ default_sorting_field détermine l’ordre par défaut des résultats quand aucun score de pertinence ne départage les candidats.

\n\n

La réponse de Typesense confirmera la création de la collection avec le nombre de champs et la configuration retenue. Si vous devez modifier le schéma plus tard (ajouter un champ, changer un type), Typesense supporte l’altération de collections via PATCH /collections/produits depuis la v0.24 — sans avoir à supprimer et recréer la collection et ses données.

\n\n

Étape 4 — Indexer 10 000 produits via l’API REST

\n\n

Typesense offre deux endpoints pour l’indexation : POST /collections/produits/documents pour un document unique, et POST /collections/produits/documents/import pour l’import en masse. Pour 10 000 produits, utilisez impérativement l’endpoint d’import — il traite les documents en batch et est dix à vingt fois plus rapide que les insertions unitaires.

\n\n

Le format attendu par l’endpoint d’import est le JSONL (JSON Lines) : un document JSON par ligne, sans virgule ni tableau englobant. Voici un exemple de fichier produits.jsonl avec trois entrées représentatives :

\n\n

{\"id\":\"1\",\"nom\":\"Samsung Galaxy A35\",\"description\":\"Smartphone 128Go double SIM\",\"categorie\":\"Smartphones\",\"marque\":\"Samsung\",\"prix_xof\":185000,\"en_stock\":true,\"note\":4.3,\"image_url\":\"https://cdn.boutique.sn/a35.jpg\",\"slug\":\"samsung-galaxy-a35\"}\n{\"id\":\"2\",\"nom\":\"Tecno Spark 20\",\"description\":\"Smartphone entrée de gamme 64Go\",\"categorie\":\"Smartphones\",\"marque\":\"Tecno\",\"prix_xof\":85000,\"en_stock\":true,\"note\":3.8,\"image_url\":\"https://cdn.boutique.sn/spark20.jpg\",\"slug\":\"tecno-spark-20\"}\n{\"id\":\"3\",\"nom\":\"Sac à dos HP 15 pouces\",\"description\":\"Housse protection ordinateur portable\",\"categorie\":\"Accessoires\",\"marque\":\"HP\",\"prix_xof\":12000,\"en_stock\":false,\"note\":4.1,\"image_url\":\"https://cdn.boutique.sn/hp-sac.jpg\",\"slug\":\"sac-hp-15\"}\n

\n\n

Lancez l’import avec curl en passant le fichier JSONL dans le corps de la requête :

\n\n

curl -X POST \\\n  \"http://localhost:8108/collections/produits/documents/import?action=upsert\" \\\n  -H \"Content-Type: text/plain\" \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  --data-binary @produits.jsonl\n

\n\n

Le paramètre action=upsert est crucial en contexte e-commerce : il crée le document s’il n’existe pas, ou le met à jour s’il existe déjà (basé sur le champ id). C’est ce dont vous avez besoin pour les synchronisations périodiques depuis WooCommerce — vous renvoyez tout le catalogue, Typesense ne crée que les nouveaux produits et met à jour les prix/stocks des existants.

\n\n

Typesense retourne une ligne de résultat par document importé. Une importation réussie ressemble à : {\"success\": true} répété N fois. En cas d’erreur sur un document particulier (champ manquant, type incorrect), cette ligne contiendra le détail de l’erreur sans interrompre l’import des autres — comportement tolérant aux pannes très utile en production.

\n\n

Pour 10 000 produits avec des descriptions courtes à moyennes, comptez 2 à 5 secondes d’indexation sur un VPS modeste. La RAM utilisée par l’index sera d’environ 50 à 150 Mo selon la taille moyenne des descriptions — bien en dessous du seuil du 1 Go alloué.

\n\n

Étape 5 — Recherche typo-tolerante et filtres facettés

\n\n

Votre collection est indexée. Il est temps de tester la recherche. L’endpoint de recherche est GET /collections/produits/documents/search avec les paramètres en query string. La tolérance aux fautes de frappe est activée par défaut — Typesense applique l’algorithme de Damerau-Levenshtein pour corriger automatiquement les erreurs de saisie.

\n\n

Testez une recherche avec une faute de frappe volontaire :

\n\n

curl -G http://localhost:8108/collections/produits/documents/search \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  --data-urlencode \"q=samsug galaxi\" \\\n  --data-urlencode \"query_by=nom,description\" \\\n  --data-urlencode \"typo_tokens_threshold=2\"\n

\n\n

Typesense corrigera automatiquement « samsug galaxi » en « samsung galaxy » et retournera les résultats pertinents. Le paramètre query_by liste les champs dans lesquels effectuer la recherche, dans l’ordre de priorité — ici le nom d’abord, puis la description. Le paramètre typo_tokens_threshold contrôle à partir de combien de tokens une faute est tolérée.

\n\n

Pour ajouter des filtres facettés — par exemple ne montrer que les Smartphones en stock dont le prix est inférieur à 200 000 XOF :

\n\n

curl -G http://localhost:8108/collections/produits/documents/search \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  --data-urlencode \"q=samsung\" \\\n  --data-urlencode \"query_by=nom,description\" \\\n  --data-urlencode \"filter_by=categorie:=Smartphones && en_stock:=true && prix_xof:<200000\" \\\n  --data-urlencode \"facet_by=categorie,marque,en_stock\" \\\n  --data-urlencode \"sort_by=prix_xof:asc\"\n

\n\n

La réponse JSON contient deux sections clés. La section hits liste les documents correspondants avec leur score de pertinence. La section facet_counts liste les valeurs disponibles pour chaque facette avec leurs compteurs — c'est ce qui alimente la colonne de filtres dans votre interface (« Smartphones (42) », « Accessoires (18) », etc.). Notez que le tri sort_by=prix_xof:asc trie les résultats par prix croissant — utile pour les clients qui cherchent le meilleur rapport qualité-prix.

\n\n

Étape 6 — Intégration frontend avec InstantSearch.js

\n\n

Typesense est conçu pour fonctionner avec InstantSearch.js, la librairie de composants UI open source développée par Algolia. Grâce à l'adaptateur officiel typesense-instantsearch-adapter, vous pouvez utiliser tous les widgets InstantSearch (SearchBox, Hits, RefinementList, RangeSlider, Pagination…) avec votre instance Typesense self-hosted, sans modifier votre code UI.

\n\n

Installez l'adaptateur et InstantSearch :

\n\n

npm install typesense-instantsearch-adapter instantsearch.js\n

\n\n

Créez votre fichier JavaScript de recherche. La clé API utilisée ici doit être une clé de recherche uniquement (read-only), jamais votre clé admin. Typesense permet de générer des clés scopées avec des permissions limitées — créez-en une dédiée au frontend :

\n\n

import TypesenseInstantSearchAdapter from 'typesense-instantsearch-adapter';\nimport instantsearch from 'instantsearch.js';\nimport { searchBox, hits, refinementList, rangeInput, pagination } from 'instantsearch.js/es/widgets';\n\n// Adaptateur Typesense — utiliser une clé API recherche uniquement (jamais la clé admin)\nconst typesenseAdapter = new TypesenseInstantSearchAdapter({\n  server: {\n    apiKey: 'votre-cle-api-recherche-uniquement',\n    nodes: [{ host: 'localhost', port: 8108, protocol: 'http' }],\n    cacheSearchResultsForSeconds: 2\n  },\n  additionalSearchParameters: {\n    query_by: 'nom,description,marque'\n  }\n});\n\n// Initialiser InstantSearch avec l'adaptateur Typesense\nconst search = instantsearch({\n  indexName: 'produits',\n  searchClient: typesenseAdapter.searchClient\n});\n\n// Ajouter les widgets\nsearch.addWidgets([\n  searchBox({ container: '#search-box', placeholder: 'Cherchez un produit...' }),\n  hits({\n    container: '#hits',\n    templates: {\n      item: (hit) => `\n        
\n

${hit.nom}

\n

${hit.description}

\n ${hit.prix_xof.toLocaleString('fr-SN')} XOF\n
\n `\n }\n }),\n refinementList({ container: '#filtre-categorie', attribute: 'categorie' }),\n refinementList({ container: '#filtre-marque', attribute: 'marque' }),\n rangeInput({ container: '#filtre-prix', attribute: 'prix_xof' }),\n pagination({ container: '#pagination' })\n]);\n\nsearch.start();\n

\n\n

Ce code minimal suffit à obtenir une interface de recherche complète avec barre de recherche, résultats, filtres par catégorie, filtres par marque et plage de prix. Chaque frappe dans la SearchBox déclenche une requête à Typesense via l'adaptateur — le tout en temps réel, sans appuyer sur Entrée. La latence perçue par l'utilisateur est inférieure à 100 ms sur un réseau local ou un hébergement africain correct.

\n\n

Pour l'intégration dans WooCommerce spécifiquement, le plugin officiel Search with Typesense (disponible sur wordpress.org) propose une intégration clé en main qui remplace le moteur de recherche natif de WooCommerce par Typesense. Il gère automatiquement la synchronisation du catalogue produits et fournit un widget InstantSearch configurable depuis l'interface d'administration WordPress.

\n\n

Étape 7 — Synonymes et merchandising

\n\n

La recherche brute par pertinence ne suffit pas pour une expérience e-commerce complète. Vos clients cherchent « portable » et vous vendez des « ordinateurs portables » — sans synonymes, ces recherches retournent zéro résultat. De même, vous voulez peut-être mettre en avant certains produits pour des recherches spécifiques (un partenariat fournisseur, des articles en promotion). Typesense répond à ces deux besoins avec les Synonym Sets et les Curation Rules.

\n\n

Pour créer un ensemble de synonymes bidirectionnels entre « portable », « laptop » et « ordinateur portable », utilisez l'endpoint des synonym sets. Notez que depuis la v30, les synonymes sont gérés via un endpoint global /synonym_sets plutôt que par collection :

\n\n

curl -X POST http://localhost:8108/synonym_sets \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  -d '{\n    \"id\": \"synonymes-ordinateurs\",\n    \"synonyms\": [\"portable\", \"laptop\", \"ordinateur portable\", \"pc portable\"],\n    \"collection_names\": [\"produits\"]\n  }'\n

\n\n

Une fois ce synonym set créé, une recherche sur « portable » retournera aussi les produits qui contiennent « laptop » ou « pc portable » dans leur nom ou description — et vice versa. Vous pouvez créer autant de synonym sets que nécessaire pour couvrir les variantes linguistiques de votre catalogue.

\n\n

Pour le merchandising — forcer un produit spécifique à apparaître en tête des résultats pour une requête donnée — utilisez les règles de curation. Par exemple, pour mettre en avant le « Samsung Galaxy S24 » (id=42) quand quelqu'un cherche « meilleur téléphone » :

\n\n

curl -X POST http://localhost:8108/collections/produits/overrides \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}\" \\\n  -d '{\n    \"id\": \"promo-s24\",\n    \"rule\": {\n      \"query\": \"meilleur téléphone\",\n      \"match\": \"exact\"\n    },\n    \"includes\": [{\"id\": \"42\", \"position\": 1}]\n  }'\n

\n\n

Les règles de curation sont évaluées avant les synonymes — ce qui signifie que si une règle remplace la requête, les synonymes s'appliquent ensuite à la requête modifiée. Cette combinaison offre un contrôle éditorial fin sur les résultats, ce qui est exactement ce dont un e-commerce a besoin pour optimiser ses taux de conversion sur les recherches à fort trafic.

\n\n

Erreurs fréquentes

\n\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

Erreur rencontrée Cause probable Solution
401 Unauthorized sur toutes les requêtes Header X-TYPESENSE-API-KEY absent ou clé incorrecte Vérifier que la variable d'env TYPESENSE_API_KEY est bien exportée avant le docker run ; vérifier la casse du header
Erreur CORS sur les requêtes frontend Flag --enable-cors manquant dans le lancement Docker Relancer le conteneur en ajoutant --enable-cors à la commande ; vérifier avec docker logs typesense que l'option est prise en compte
Index perdu après redémarrage du conteneur Volume Docker non monté — données stockées dans le layer éphémère du conteneur Toujours monter -v /opt/typesense/data:/data ; vérifier avec docker inspect typesense | grep Mounts
Import JSONL échoue sur certains documents Type de champ incorrect (ex : prix envoyé en string au lieu de float) ou champ obligatoire manquant Inspecter la réponse ligne par ligne — Typesense indique précisément le champ fautif ; déclarer les champs optionnels avec "optional": true
Zéro résultat sur une recherche pourtant correcte Champ utilisé dans query_by non inclus dans le schéma ou mal orthographié Vérifier le schéma avec GET /collections/produits ; s'assurer que les champs listés dans query_by existent et sont de type string
Synonymes v30+ ne fonctionnent pas Utilisation de l'ancienne route /collections/{name}/synonyms supprimée en v30 Migrer vers POST /synonym_sets et mettre à jour les clés API scopées avec l'action synonym_sets:*
OOMKilled — conteneur tué par le kernel RAM insuffisante sur le VPS pour la taille du catalogue Augmenter la RAM du VPS (2 Go minimum en production) ; réduire le nombre de champs indexés ; exclure les descriptions longues de l'index avec "index": false

\n\n

Adaptation au contexte ouest-africain

\n\n

Déployer Typesense en Afrique de l'Ouest, c'est faire face à trois réalités que les tutoriels européens ignorent : les contraintes de bande passante, les paiements mobile money, et le multilinguisme français/langues locales. Voici comment y répondre concrètement.

\n\n

Économie vs Algolia — le calcul est simple. Une boutique e-commerce qui réalise 50 000 recherches par mois sur Algolia paie environ 200 à 500 USD selon son plan — soit 120 000 à 300 000 XOF chaque mois, rien que pour la recherche. Avec Typesense self-hosted sur un VPS OVH ou DigitalOcean à 12 USD/mois (7 200 XOF), le ROI devient positif dès le premier mois. Sur un an, l'économie dépasse 5 000 USD — de quoi financer plusieurs développeurs juniors ou une campagne marketing complète.

\n\n

WooCommerce + Typesense + CinetPay/Wave. La stack complète pour une boutique e-commerce africaine en 2026 ressemble à ceci : WooCommerce gère le catalogue, les commandes et les paiements via les extensions CinetPay ou Wave (Mobile Money FCFA), Typesense gère la recherche instantanée, et un plugin comme Search with Typesense synchronise les deux en temps réel. Chaque fois qu'un nouveau produit est créé dans WooCommerce, un webhook déclenche l'indexation dans Typesense via l'API REST — votre catalogue de recherche reste synchronisé sans intervention manuelle.

\n\n

Recherche de prix en XOF. Une spécificité importante : les prix en XOF (Franc CFA) sont des nombres entiers pouvant dépasser 1 million. Déclarez le champ prix_xof en type int64 plutôt que float si vos prix sont toujours entiers — cela améliore les performances de filtrage. Côté interface, formatez les prix avec Number.toLocaleString('fr-SN') ou 'fr-CI' pour obtenir l'affichage correct avec séparateurs de milliers : « 185 000 XOF ».

\n\n

Multilinguisme français/wolof. Typesense ne dispose pas de tokenizer wolof natif en 2026, mais cela ne pose pas de problème majeur : le wolof s'écrit en latin et la tokenisation par défaut (séparation sur espaces et ponctuation) fonctionne correctement. Ce qu'il faut faire, c'est soigner les synonymes : « jaay » et « vente », « njëkël » et « promotion », « xaalis » et « prix » — ces paires enrichissent considérablement la pertinence pour les utilisateurs wolofphones. Un fichier de synonymes wolof-français de 50 à 100 paires couvre l'essentiel du vocabulaire commercial.

\n\n

Bande passante limitée. Sur les connexions mobiles 3G encore courantes en zones périurbaines, chaque requête compte. Activez le paramètre cacheSearchResultsForSeconds: 2 dans l'adaptateur InstantSearch — cela évite de refaire la même requête si l'utilisateur hésite entre deux variantes de frappe très proches. Côté Nginx, activez la compression gzip pour les réponses de l'API Typesense : les payloads JSON compressés sont 3 à 5 fois plus petits.

\n\n

VPS abordables en Afrique. Les offres VPS disponibles depuis l'Afrique de l'Ouest incluent OVH (datacenter Roubaix, latence 80-120 ms depuis Dakar), DigitalOcean (New York ou Frankfurt), ou des offres locales comme Sonatel Cloud ou ADIE pour les projets institutionnels sénégalais. Un VPS 2 vCPU / 2 Go RAM à 10-15 USD/mois est suffisant pour un catalogue de 50 000 produits et 100 000 recherches mensuelles.

\n\n

Tutoriels frères

\n\n

\n\n

Pour aller plus loin

\n\n

\n\n

FAQ

\n\n

\n

Q : Typesense peut-il remplacer complètement Algolia dans une application en production ?

\n

R : Oui, pour la grande majorité des cas d'usage. Typesense couvre la tolérance aux fautes de frappe, les filtres facettés, le merchandising, les synonymes, la recherche vectorielle et la géolocalisation. Ce qui manque encore par rapport à Algolia est principalement le tableau de bord analytique avancé (A/B testing, rapports de clics) et le réseau CDN mondial. Pour une PME africaine dont l'audience est régionale, ces fonctionnalités avancées sont rarement nécessaires.

\n\n

Q : Combien de produits peut-on indexer avec 1 Go de RAM ?

\n

R : La règle empirique est d'environ 1 Go de RAM par million de documents pour des champs texte de taille moyenne (nom + description courte). Un catalogue e-commerce de 50 000 à 100 000 produits tient confortablement dans 256 à 512 Mo de RAM indexée. Sur un VPS avec 2 Go de RAM, Typesense peut gérer plusieurs centaines de milliers de produits tout en laissant de la mémoire pour le système d'exploitation et les autres services.

\n\n

Q : Comment sécuriser l'accès à l'API Typesense depuis le frontend ?

\n

R : Générez une clé API de recherche uniquement (search-only) via l'endpoint POST /keys avec l'action documents:search restreinte à la collection produits. Cette clé peut être exposée côté client en toute sécurité — elle ne permet ni d'écrire ni de supprimer des données. Ne jamais exposer la clé admin dans le frontend.

\n\n

Q : Est-il possible d'utiliser Typesense avec un site WooCommerce existant sans tout reconfigurer ?

\n

R : Oui. Le plugin officiel Search with Typesense disponible sur wordpress.org gère l'intégration de façon transparente. Il intercepte les requêtes de recherche WooCommerce, les redirige vers votre instance Typesense, et retourne les résultats dans le format attendu par WooCommerce. La configuration se fait entièrement depuis l'interface d'administration WordPress en renseignant l'URL de votre instance et votre clé API.

\n\n

Q : Typesense supporte-t-il le français avec ses accents et caractères spéciaux ?

\n

R : Oui, nativement. Typesense gère correctement l'UTF-8 et traite les caractères accentués du français (é, è, ê, à, ù, ç…) sans configuration supplémentaire. La tolérance aux fautes de frappe fonctionne également sur les accents — une recherche « ecommerce » trouvera les documents contenant « e-commerce » ou « e commerce ».

\n\n

Q : Comment mettre à jour le stock d'un produit en temps réel sans réindexer tout le catalogue ?

\n

R : Utilisez l'endpoint PATCH /collections/produits/documents/{id} pour mettre à jour uniquement les champs modifiés d'un document. Par exemple, pour mettre à jour le stock du produit id=42 : curl -X PATCH http://localhost:8108/collections/produits/documents/42 -d '{\"en_stock\": false, \"prix_xof\": 175000}'. Cette mise à jour partielle est instantanée et n'affecte pas les autres documents ni les performances générales du moteur.

\n\n

Q : Typesense fonctionne-t-il sans Docker, directement sur un VPS Linux ?

\n

R : Oui. Typesense propose des packages natifs DEB (Ubuntu/Debian) et RPM (CentOS/RHEL) téléchargeables sur typesense.org/downloads. L'installation sans Docker est recommandée pour les environnements de production où vous souhaitez un contrôle fin des ressources système et une intégration avec systemd. Docker reste préférable pour les environnements de développement et les déploiements avec Compose multi-services.

\n

\n\n


\n\n

\n Site réalisé par [ITS] ITSkillsCenter — Formation IT en Afrique de l'Ouest\n

"
}


ملخص بالعربية: نقدم في هذا الدليل التقني خادم Typesense للبحث الفوري المستضاف ذاتيًا — بديل مجاني عن Algolia — مع شرح خطوة بخطوة لنشره عبر Docker وتهيئته لمتاجر التجارة الإلكترونية في غرب أفريقيا، بما في ذلك دعم الدفع عبر CinetPay وWave وتكاملWooCommerce.
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité