Cliente Elasticsearch para Node.js: @elastic/elasticsearch

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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/elasticsearch


Conexã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                    

Recommendations