Cliente Elasticsearch para Node.js (@elastic/elasticsearch)
A biblioteca @elastic/elasticsearch é o cliente HTTP oficial e de alto desempenho para interagir com o Elasticsearch a partir do ambiente Node.js. Ela fornece uma API conveniente para realizar todas as operações: desde a simples indexação de documentos até consultas de pesquisa complexas e agregações. A biblioteca suporta totalmente todas as versões do Elasticsearch 7.x e 8.x, incluindo trabalho com clusters, autenticação e compressão de dados.
Instalação
Para instalar, use npm ou yarn:
npm install @elastic/elasticsearch# ouyarn add @elastic/elasticsearchConexão básica
Crie uma instância do cliente, informando o endereço do servidor Elasticsearch. Para a versão 8.x, é necessária a configuração de TLS e chave de API ou login/senha.
const { Client } = require('@elastic/elasticsearch');
// Conexão ao servidor local (Elasticsearch 7.x)const client = new Client({ node: 'http://localhost:9200' });
// Conexão ao servidor em nuvem Elastic Cloud (8.x)const cloudClient = new Client({ cloud: { id: 'my-cloud-id' }, auth: { apiKey: 'base64EncodedApiKey' }});Operações principais
1. Indexação (adição) de documento
O método index adiciona ou substitui um documento no índice especificado.
async function indexDocument() { const result = await client.index({ index: 'articles', id: '1', body: { title: 'Cliente Elasticsearch para Node.js', content: 'Descrição detalhada da biblioteca...', tags: ['elasticsearch', 'node.js'], published: true, views: 150 } }); console.log('Documento indexado:', result.result);}indexDocument();2. Pesquisa de documentos
O método search realiza uma pesquisa de texto completo usando 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} (relevância: ${hit._score})`); });}searchDocuments();3. Obter 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 não encontrado'); } else { console.error('Erro:', error); } }}getDocument();4. Atualização de 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 atualizado, versão:', body._version);}updateDocument();5. Exclusão de documento
async function deleteDocument() { const { body } = await client.delete({ index: 'articles', id: '1' }); console.log('Resultado da exclusão:', body.result);}deleteDocument();Trabalhando com agregações
As agregações permitem obter dados estatísticos com base nos resultados da pesquisa.
async function aggregateByTags() { const { body } = await client.search({ index: 'articles', body: { size: 0, // não retornar os próprios documentos aggs: { popular_tags: { terms: { field: 'tags.keywor