Client Elasticsearch pour JavaScript (Node.js) — @elastic/elasticsearch
\n\nElasticsearch 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.
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\nInstallation et connexion
\n\nL'installation du client se fait via le gestionnaire de paquets npm :
\n\nnpm install @elastic/elasticsearch\n\nAprè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\nconst { 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\nPour utiliser le service cloud Elastic Cloud, on utilise le paramètre cloud.id et auth.apiKey.
Gestion des index
\n\nUn index dans Elasticsearch est l'équivalent d'une base de données dans les SGBD relationnels. Voici les opérations principales.
\n\nCréation d'un index
\n\nasync 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\nSuppression d'un index
\n\nasync function deleteIndex() {\n await client.indices.delete({ index: 'products' });\n console.log('Index supprimé');\n}\n\nAjout et mise à jour de documents
\n\nUn document est l'unité de base des données dans Elasticsearch. Ajoutons quelques enregistrements dans l'index products :
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\nPour une mise à jour partielle, on utilise la méthode update :
await client.update({\n index: 'products',\n id: '1',\n body: {\n doc: {\n price: 2399.99\n }\n }\n});\n\nRecherche de données
\n\nElasticsearch fournit un DSL puissant pour construire des requêtes. Voici quelques exemples.
\n\nRecherche en texte intégral
\n\nasync 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 Aussi dans la bibliothèque
Générateur de QR codes en Swift : bibliothèque EFQRCode pour iOS et macOS
Programmation Réactive en JavaScript (Node.js) : RxJS & Observables
Travailler avec les images en Swift : guide complet pour iOS et macOS
better-sqlite3-typescript avec TypeScript : guide complet et exemples
Traitement et analyse Markdown en PHP : bibliothèques et exemples