Client Elasticsearch pour Node.js : @elastic/elasticsearch

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client Elasticsearch pour JavaScript (Node.js) — @elastic/elasticsearch

\n\n

Elasticsearch est un puissant système de recherche et d'analyse distribué, construit sur Apache Lucene. Il permet d'effectuer des recherches en texte intégral, des agrégations de données et une analyse de logs en temps réel. Pour interagir avec Elasticsearch depuis des applications Node.js, il existe un client officiel — @elastic/elasticsearch. Il fournit une API pratique pour toutes les opérations : de la connexion au cluster aux requêtes de recherche complexes.

\n\n

La bibliothèque prend entièrement en charge toutes les versions d'Elasticsearch 7.x et 8.x, fonctionne de manière asynchrone avec des promesses et est idéale pour construire des services de recherche, d'analyse et de surveillance à forte charge. Dans cet article, nous aborderons l'installation, la configuration de base et les opérations principales sur les données avec Node.js.

\n\n

Installation et connexion

\n\n

L'installation du client se fait via le gestionnaire de paquets npm :

\n\n
npm install @elastic/elasticsearch
\n\n

Après l'installation, il faut créer une instance du client en spécifiant l'adresse du serveur Elasticsearch et, si nécessaire, les paramètres d'authentification :

\n\n
const { Client } = require('@elastic/elasticsearch');\n\nconst client = new Client({\n  node: 'http://localhost:9200',\n  auth: {\n    username: 'elastic',\n    password: 'changeme'\n  }\n});
\n\n

Pour utiliser le service cloud Elastic Cloud, on utilise le paramètre cloud.id et auth.apiKey.

\n\n

Gestion des index

\n\n

Un index dans Elasticsearch est l'équivalent d'une base de données dans les SGBD relationnels. Voici les opérations principales.

\n\n

Création d'un index

\n\n
async function createIndex() {\n  const response = await client.indices.create({\n    index: 'products',\n    body: {\n      settings: {\n        number_of_shards: 1,\n        number_of_replicas: 1\n      },\n      mappings: {\n        properties: {\n          title: { type: 'text' },\n          description: { type: 'text' },\n          price: { type: 'float' },\n          created_at: { type: 'date' }\n        }\n      }\n    }\n  });\n  console.log('Index créé :', response);\n}
\n\n

Suppression d'un index

\n\n
async function deleteIndex() {\n  await client.indices.delete({ index: 'products' });\n  console.log('Index supprimé');\n}
\n\n

Ajout et mise à jour de documents

\n\n

Un document est l'unité de base des données dans Elasticsearch. Ajoutons quelques enregistrements dans l'index products :

\n\n
async function addDocuments() {\n  const doc1 = {\n    title: 'Ordinateur portable Apple MacBook Pro',\n    description: 'Ordinateur portable puissant pour développeurs et designers',\n    price: 2499.99,\n    created_at: new Date()\n  };\n\n  const doc2 = {\n    title: 'Clavier mécanique Logitech',\n    description: 'Clavier sans fil avec rétroéclairage',\n    price: 149.99,\n    created_at: new Date()\n  };\n\n  // Ajout avec un ID spécifié\n  await client.index({\n    index: 'products',\n    id: '1',\n    body: doc1\n  });\n\n  // Ajout sans ID (génération automatique)\n  await client.index({\n    index: 'products',\n    body: doc2\n  });\n\n  // Écriture forcée sur le disque\n  await client.indices.refresh({ index: 'products' });\n}
\n\n

Pour une mise à jour partielle, on utilise la méthode update :

\n\n
await client.update({\n  index: 'products',\n  id: '1',\n  body: {\n    doc: {\n      price: 2399.99\n    }\n  }\n});
\n\n

Recherche de données

\n\n

Elasticsearch fournit un DSL puissant pour construire des requêtes. Voici quelques exemples.

\n\n

Recherche en texte intégral

\n\n
async function searchProducts(query) {\n  const response = await client.search({\n    index: 'products',\n    body: {\n      query: {\n        match: {\n          description: query\n        }\n      }\n    }\n  });\n\n  console.log('Documents trouvés :', response.hits.total.value);\n  response.hits.hits.forEach                    

Recommendations