Cliente Elasticsearch para JavaScript (Node.js) — @elastic/elasticsearch
\n\nElasticsearch es un potente sistema de búsqueda y análisis distribuido, construido sobre Apache Lucene. Permite realizar búsquedas de texto completo, agregación de datos y análisis de registros en tiempo real. Para interactuar con Elasticsearch desde aplicaciones Node.js, existe el cliente oficial — @elastic/elasticsearch. Proporciona una API conveniente para todas las operaciones: desde la conexión al clúster hasta consultas de búsqueda complejas.
La biblioteca es totalmente compatible con todas las versiones de Elasticsearch 7.x y 8.x, funciona de forma asíncrona con promesas y es ideal para construir servicios de búsqueda, análisis y monitoreo de alta carga. En este artículo, veremos la instalación, configuración básica y operaciones principales con datos usando Node.js.
\n\nInstalación y conexión
\n\nLa instalación del cliente se realiza a través del gestor de paquetes npm:
\n\nnpm install @elastic/elasticsearch\n\nDespués de la instalación, es necesario crear una instancia del cliente, especificando la dirección del servidor Elasticsearch y, si es necesario, los parámetros de autenticación:
\n\nconst { Client } = require('@elastic/elasticsearch');\n\nconst client = new Client({\n node: 'http://localhost:9200',\n auth: {\n username: 'elastic',\n password: 'changeme'\n }\n});\n\nPara trabajar con el servicio en la nube Elastic Cloud, se utilizan los parámetros cloud.id y auth.apiKey.
Trabajo con índices
\n\nUn índice en Elasticsearch es el equivalente a una base de datos en los sistemas de gestión de bases de datos relacionales. Veamos las operaciones principales.
\n\nCreación de un índice
\n\nasync function createIndex() {\n const response = await client.indices.create({\n index: 'products',\n body: {\n settings: {\n number_of_shards: 1,\n number_of_replicas: 1\n },\n mappings: {\n properties: {\n title: { type: 'text' },\n description: { type: 'text' },\n price: { type: 'float' },\n created_at: { type: 'date' }\n }\n }\n }\n });\n console.log('Índice creado:', response);\n}\n\nEliminación de un índice
\n\nasync function deleteIndex() {\n await client.indices.delete({ index: 'products' });\n console.log('Índice eliminado');\n}\n\nAdición y actualización de documentos
\n\nUn documento es la unidad básica de datos en Elasticsearch. Agreguemos algunos registros al índice products:
async function addDocuments() {\n const doc1 = {\n title: 'Portátil Apple MacBook Pro',\n description: 'Portátil potente para desarrolladores y diseñadores',\n price: 2499.99,\n created_at: new Date()\n };\n\n const doc2 = {\n title: 'Teclado mecánico Logitech',\n description: 'Teclado inalámbrico con retroiluminación',\n price: 149.99,\n created_at: new Date()\n };\n\n // Adición con ID especificado\n await client.index({\n index: 'products',\n id: '1',\n body: doc1\n });\n\n // Adición sin ID (generación automática)\n await client.index({\n index: 'products',\n body: doc2\n });\n\n // Escritura forzada en disco\n await client.indices.refresh({ index: 'products' });\n}\n\nPara la actualización parcial se utiliza el método update:
await client.update({\n index: 'products',\n id: '1',\n body: {\n doc: {\n price: 2399.99\n }\n }\n});\n\nBúsqueda de datos
\n\nElasticsearch proporciona un potente DSL para construir consultas. Veamos algunos ejemplos.
\n\nBúsqueda de texto completo
\n\nasync function searchProducts(query) {\n const response = await client.search({\n index: 'products',\n body: {\n query: {\n match: {\n description: query\n }\n }\n }\n });\n\n console.log('Documentos encontrados:', response.hits.total.value);\n response.hits.hits.forEach También en la biblioteca
TBB (Intel Threading Building Blocks) para C++: guía completa con ejemplos
Geolocalización y mapas en Kotlin: bibliotecas, herramientas y ejemplos
Trabajo con imágenes en Go: redimensionar y recortar con la librería imaging