Cliente Elasticsearch para Node.js (@elastic/elasticsearch)
La biblioteca @elastic/elasticsearch es el cliente HTTP oficial de alto rendimiento para interactuar con Elasticsearch desde el entorno Node.js. Proporciona una API conveniente para realizar todas las operaciones: desde la indexación simple de documentos hasta consultas de búsqueda complejas y agregaciones. La biblioteca es totalmente compatible con todas las versiones de Elasticsearch 7.x y 8.x, incluyendo el trabajo con clústeres, autenticación y compresión de datos.
Instalación
Para la instalación, use npm o yarn:
npm install @elastic/elasticsearch# oyarn add @elastic/elasticsearchConexión básica
Cree una instancia del cliente especificando la dirección del servidor Elasticsearch. Para la versión 8.x, se requiere configuración TLS y una clave API o usuario/contraseña.
const { Client } = require('@elastic/elasticsearch');
// Conexión a un servidor local (Elasticsearch 7.x)const client = new Client({ node: 'http://localhost:9200' });
// Conexión a un servidor en la nube de Elastic Cloud (8.x)const cloudClient = new Client({ cloud: { id: 'my-cloud-id' }, auth: { apiKey: 'base64EncodedApiKey' }});Operaciones principales
1. Indexación (agregar) de un documento
El método index agrega o reemplaza un documento en el índice especificado.
async function indexDocument() { const result = await client.index({ index: 'articles', id: '1', body: { title: 'Cliente Elasticsearch para Node.js', content: 'Descripción detallada de la biblioteca...', tags: ['elasticsearch', 'node.js'], published: true, views: 150 } }); console.log('Documento indexado:', result.result);}indexDocument();2. Búsqueda de documentos
El método search realiza una búsqueda de texto completo utilizando Query DSL.
async function searchDocuments() { const { body } = await client.search({ index: 'articles', body: { query: { bool: { must: [ { match: { title: 'Elasticsearch' } }, { term: { published: true } } ], filter: [ { range: { views: { gte: 100 } } } ] } } } });
console.log('Documentos encontrados:', body.hits.total.value); body.hits.hits.forEach(hit => { console.log(`- ${hit._source.title} (relevancia: ${hit._score})`); });}searchDocuments();3. Obtener un documento por ID
async function getDocument() { try { const { body } = await client.get({ index: 'articles', id: '1' }); console.log('Documento:', body._source); } catch (error) { if (error.meta.statusCode === 404) { console.log('Documento no encontrado'); } else { console.error('Error:', error); } }}getDocument();4. Actualización de un documento (parcial)
async function updateDocument() { const { body } = await client.update({ index: 'articles', id: '1', body: { doc: { views: 151, updated_at: new Date().toISOString() } } }); console.log('Documento actualizado, versión:', body._version);}updateDocument();5. Eliminación de un documento
async function deleteDocument() { const { body } = await client.delete({ index: 'articles', id: '1' }); console.log('Resultado de la eliminación:', body.result);}deleteDocument();Trabajo con agregaciones
Las agregaciones permiten obtener datos estadísticos basados en los resultados de búsqueda.
async function aggregateByTags() { const { body } = await client.search({ index: 'articles', body: { size: 0, // no devolver los documentos en sí aggs: { popular_tags: { terms: { field: 'tags.keywor También en la biblioteca
tsx para TypeScript: guía completa con ejemplos prácticos
mimalloc en C++: guía completa con ejemplos prácticos
Cliente Elasticsearch para Rust: guía de elasticsearch-rs
Configuración de aplicaciones en C++: bibliotecas y herramientas para una configuración flexible