Client Elasticsearch pour TypeScript : @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 TypeScript (@elastic/elasticsearch)

\n\n

Dans 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.

\n\n

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\n
    \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
\n\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\n

Installation

\n\n

Pour commencer, installez le package via npm ou yarn :

\n\n
npm install @elastic/elasticsearch\n# ou\nyarn add @elastic/elasticsearch
\n\n

Si vous utilisez TypeScript, les types supplémentaires ne sont pas nécessaires — ils sont déjà intégrés dans le package.

\n\n

Connexion et configuration du client

\n\n

Créez une instance du client en spécifiant l'URL de votre cluster Elasticsearch :

\n\n
import { 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\n

Pour les déploiements cloud (Elastic Cloud), utilisez cloud.id et auth.apiKey :

\n\n
const client = new Client({\n  cloud: {\n    id: 'my-cluster:dXMtZWFzdD...'\n  },\n  auth: {\n    apiKey: 'base64EncodedApiKey'\n  }\n});
\n\n

Opérations principales

\n\n

1. Indexation d'un document

\n\n

Ajout d'un nouveau document dans un index :

\n\n
interface 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\n

2. Recherche de documents

\n\n

Recherche simple en texte intégral dans le champ description :

\n\n
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\n

3. Agrégations

\n\n

Regroupement des produits par tags :

\n\n
async 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                    

Recommendations