configurer elasticsearch et node.js pour un moteur de recherche performant : guide technique
27/02/2026
Introduction au moteur de recherche avec Elasticsearch et Node.js
Dans ce tutoriel dédié aux développeurs, nous allons mettre en place un moteur de recherche performant pour votre application web en combinant Elasticsearch 8 et Node.js. Vous découvrirez comment installer Elasticsearch en Docker, définir un mapping adapté, indexer des données puis interroger votre cluster via le client officiel @elastic/elasticsearch. À la clé : des temps de réponse décisifs pour l’expérience utilisateur et des gains de performance mesurables.
Étape 1 : déployer Elasticsearch 8 avec Docker
# Créer un réseau Docker dédié
docker network create es-net
# Lancer un nœud Elasticsearch
docker run -d --name es-node1 --network es-net \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-p 9200:9200 \
docker.elastic.co/elasticsearch/elasticsearch:8.6.0
Vérifiez le bon démarrage :
curl -s http://localhost:9200 | jq .version.number
# Doit afficher 8.6.0 ou version installée
Étape 2 : créer un index avec mapping personnalisé
Pour optimiser la recherche texte et la pondération des champs, nous définissons un mapping précis :
curl -X PUT "localhost:9200/produits" -H 'Content-Type: application/json' -d '
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"title": { "type": "text", "analyzer": "standard" },
"description": { "type": "text", "analyzer": "french" },
"price": { "type": "double" },
"available": { "type": "boolean" },
"createdAt": { "type": "date" }
}
}
}'
Étape 3 : indexer et rechercher avec Node.js
Installez le client Elasticsearch :
npm install @elastic/elasticsearch
Exemple de code pour indexer un document :
const { Client } = require('@elastic/elasticsearch');
const es = new Client({ node: 'http://localhost:9200' });
async function indexProduct(product) {
await es.index({
index: 'produits',
id: product.id,
document: product
});
await es.indices.refresh({ index: 'produits' });
}
// Exemple d’usage
indexProduct({
id: '1',
title: 'Chaussures running',
description: 'Confort maximisé pour marathon',
price: 79.99,
available: true,
createdAt: '2023-05-15'
});
Pour la recherche en full-text :
async function searchProducts(query) {
const { hits } = await es.search({
index: 'produits',
query: {
multi_match: {
query,
fields: ['title^2', 'description']
}
}
});
return hits.hits.map(hit => hit._source);
}
searchProducts('running marathon').then(console.log);
Bonnes pratiques et optimisation
- Shards et réplicas : ajustez le nombre de
shardsetreplicasselon le volume de données. (services application web) - Analyseurs personnalisés : utilisez
edge_ngrampour l’autocomplétion etfrenchpour la langue. - Bulk indexing : privilégiez l’API
_bulkpour insérer rapidement de gros volumes. - Monitoring : intégrez
Elasticsearch Exporteravec Prometheus/Grafana pour suivre l’usage CPU, JVM et latence des requêtes. (technologies Docker & Node.js) - Retry et backoff : gérez les erreurs de connexion avec un mécanisme de retry exponentiel dans votre client Node.js.
Conclusion
En combinant Elasticsearch 8 et Node.js, vous obtenez un moteur de recherche rapide, scalable et adapté à la croissance de votre application. Mesurez régulièrement la latence (objectif <20 ms) et ajustez vos settings pour maintenir des performances optimales. Pour aller plus loin, pensez à sharder vos données géographiques ou temporelles.
Besoin d’accompagnement pour intégrer Elasticsearch dans votre projet ? Contactez nos experts pour une séance de consulting IT offerte.

