Client Elasticsearch pour TypeScript (@elastic/elasticsearch)
\n\nDans le développement web moderne, la recherche en texte intégral et l'analyse de données sont devenues des éléments essentiels de nombreuses applications. Elasticsearch est un puissant moteur de recherche distribué, construit sur Apache Lucene. Pour interagir avec lui depuis des applications TypeScript (à la fois côté serveur Node.js et dans le navigateur), le client officiel @elastic/elasticsearch est utilisé. Dans cet article, nous allons détailler son installation, sa configuration et ses principales fonctionnalités.
Qu'est-ce que @elastic/elasticsearch ?
\n\n@elastic/elasticsearch est le client officiel haute performance pour Elasticsearch, écrit en TypeScript. Il fournit un ensemble complet d'API pour interagir avec un cluster Elasticsearch, notamment :
- \n
- L'indexation et la suppression de documents \n
- La recherche en texte intégral avec prise en charge de requêtes complexes \n
- Les agrégations pour l'analyse de données (regroupement, statistiques) \n
- La gestion des index et du mapping \n
- La prise en charge du pool de connexions, des tentatives répétées et de l'équilibrage de charge \n
Grâce à la prise en charge complète de TypeScript, vous bénéficiez de l'autocomplétion, de la vérification des types et de la documentation directement dans votre IDE.
\n\nInstallation
\n\nPour commencer, installez le package via npm ou yarn :
\n\nnpm install @elastic/elasticsearch\n# ou\nyarn add @elastic/elasticsearch\n\nSi vous utilisez TypeScript, les types supplémentaires ne sont pas nécessaires — ils sont déjà intégrés dans le package.
\n\nConnexion et configuration du client
\n\nCréez une instance du client en spécifiant l'URL de votre cluster Elasticsearch :
\n\nimport { Client } from '@elastic/elasticsearch';\n\nconst client = new Client({\n node: 'http://localhost:9200', // ou endpoint cloud\n auth: {\n username: 'elastic',\n password: 'changeme'\n },\n // Pour la production, il est recommandé d'utiliser TLS\n tls: {\n rejectUnauthorized: false // uniquement pour le développement !\n }\n});\n\nPour les déploiements cloud (Elastic Cloud), utilisez cloud.id et auth.apiKey :
const client = new Client({\n cloud: {\n id: 'my-cluster:dXMtZWFzdD...'\n },\n auth: {\n apiKey: 'base64EncodedApiKey'\n }\n});\n\nOpérations principales
\n\n1. Indexation d'un document
\n\nAjout d'un nouveau document dans un index :
\n\ninterface Product {\n id: number;\n name: string;\n description: string;\n price: number;\n tags: string[];\n}\n\nasync function indexProduct(product: Product) {\n const response = await client.index({\n index: 'products',\n id: String(product.id),\n body: product,\n refresh: 'wait_for' // attendre la mise à jour de l'index\n });\n console.log('Document indexé :', response.result);\n}\n\nindexProduct({\n id: 1,\n name: 'Ordinateur portable Lenovo ThinkPad',\n description: 'Ordinateur portable puissant pour le développement',\n price: 1200,\n tags: ['électronique', 'ordinateurs portables']\n});\n\n2. Recherche de documents
\n\nRecherche simple en texte intégral dans le champ description :
async function searchProducts(query: string) {\n const response = await client.search({\n index: 'products',\n body: {\n query: {\n match: {\n description: query\n }\n },\n // Pagination\n from: 0,\n size: 10\n }\n });\n\n const hits = response.hits.hits.map(hit => hit._source);\n console.log('Produits trouvés :', hits);\n return hits;\n}\n\nsearchProducts('ordinateur portable développement');\n\n3. Agrégations
\n\nRegroupement des produits par tags :
\n\nasync function aggregateByTags() {\n const response = await client.search({\n index: 'products',\n body: {\n size: 0, // ne pas retourner les documents eux-mêmes\n aggs: {\n by_tag: {\n terms: {\n field: 'tags.keyword',\n size: 20\n }\n }\n Aussi dans la bibliothèque
Bibliothèque standard C++ : aperçu complet et exemples de code
Génération de PDF en TypeScript : bibliothèques et outils pour Node.js
mockall Rust : guide complet avec exemples
Client HTTP pour JavaScript (Node.js) : top bibliothèques pour travailler avec les API
Parsing HTML en Rust : bibliothèques et exemples pratiques