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/elasticsearchIl est également recommandé d'installer les types pour Node.js si vous travaillez dans un environnement Node :
npm install -D @types/nodeConfiguration 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 BookMise à 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 BookAgré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' }, }, }, Aussi dans la bibliothèque
Travailler avec CSV en PHP : lecture, écriture et traitement des données
Client Elasticsearch pour Rust : présentation de la bibliothèque elasticsearch-rs
Tests en Swift (iOS/macOS) : frameworks et outils
TypeORM pour TypeScript : guide complet avec exemples
Travailler avec XML en JavaScript (Node.js) : parsing, création et validation