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



La bibliothèque @elastic/elasticsearch est le client officiel le plus complet pour interagir avec le moteur de recherche Elasticsearch depuis des applications TypeScript et JavaScript. Elle fournit une API pratique pour effectuer toutes les opérations principales : indexation, recherche, mise à jour, suppression de données, ainsi que la gestion du cluster et l'exécution d'agrégations complexes. Grâce à la prise en charge complète de TypeScript, les développeurs bénéficient d'un typage strict, de l'autocomplétion dans l'IDE et de moins d'erreurs lors de la compilation.



Installation

Pour installer le client, exécutez la commande dans le terminal :

npm install @elastic/elasticsearch

Il est également recommandé d'installer les types pour Node.js si vous travaillez dans un environnement Node :

npm install -D @types/node


Configuration de base de la connexion

Créez une instance du client en spécifiant l'URL de votre serveur Elasticsearch. Par défaut, le port 9200 est utilisé.

import { Client } from '@elastic/elasticsearch';

const client = new Client({ node: 'http://localhost:9200', // Pour les clusters cloud, utilisez cloud: { id: '...' } // auth: { apiKey: '...' } ou { username: '...', password: '...' }});


Typage des réponses

L'un des principaux avantages de TypeScript est la possibilité de typer les documents. Le client prend en charge les génériques, ce qui permet de définir strictement la structure des données :

interface Book {  title: string;  author: string;  year: number;  isbn: string;  rating?: number; // champ optionnel}

// Désormais, toutes les opérations sur l'index 'books' seront typéesasync function addBook(book: Book) { const result = await client.index<Book>({ index: 'books', document: book, }); return result;}


Opérations CRUD

Création/Indexation d'un document

const book: Book = {  title: 'Guerre et Paix',  author: 'Léon Tolstoï',  year: 1869,  isbn: '978-5-17-123456-7',};

const response = await client.index({ index: 'books', id: '1', // optionnel, peut être omis — Elasticsearch générera un ID document: book,});console.log('Document indexé :', response._id);


Récupération d'un document par ID

const getResponse = await client.get({  index: 'books',  id: '1',});console.log('Document trouvé :', getResponse._source); // typé comme Book


Mise à jour d'un document

await client.update({  index: 'books',  id: '1',  doc: {    rating: 4.8, // mise à jour partielle  },});


Suppression d'un document

await client.delete({  index: 'books',  id: '1',});


Recherche de données

La méthode principale pour la recherche en texte intégral est search. Elle accepte le Query DSL (Domain Specific Language) d'Elasticsearch.

interface SearchResult {  hits: {    total: { value: number };    hits: Array<{ _source: Book }>;  };}

async function searchBooks(query: string) { const result = await client.search<SearchResult>({ index: 'books', query: { multi_match: { query: query, fields: ['title', 'author'], // recherche sur plusieurs champs }, }, });

const books = result.hits.hits.map(hit => hit._source); return books;}

// Utilisationconst books = await searchBooks('Tolstoï');console.log(books); // tableau d'objets Book


Agrégations

Les agrégations permettent d'obtenir des données statistiques sur un index, par exemple le nombre de livres par année.

async function getBooksByYear() {  const result = await client.search({    index: 'books',    size: 0, // ne pas retourner les documents eux-mêmes, seulement les agrégations    aggs: {      books_per_year: {        terms: { field: 'year' },      },    },                    

Recommendations