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 JavaScript (Node.js) — @elastic/elasticsearch

\n\n

Elasticsearch é um poderoso sistema de busca e análise distribuído, construído sobre o Apache Lucene. Ele permite realizar busca em texto completo, agregação de dados e análise de logs em tempo real. Para interagir com o Elasticsearch a partir de aplicações Node.js, existe o cliente oficial — @elastic/elasticsearch. Ele fornece uma API conveniente para todas as operações: desde a conexão ao cluster até consultas de busca complexas.

\n\n

A biblioteca suporta totalmente todas as versões do Elasticsearch 7.x e 8.x, funciona de forma assíncrona com promessas e é ideal para construir serviços de busca, análise e monitoramento de alta carga. Neste artigo, veremos a instalação, configuração básica e operações principais com dados usando Node.js.

\n\n

Instalação e conexão

\n\n

A instalação do cliente é feita através do gerenciador de pacotes npm:

\n\n
npm install @elastic/elasticsearch
\n\n

Após a instalação, é necessário criar uma instância do cliente, informando o endereço do servidor Elasticsearch e, se necessário, os parâmetros de autenticação:

\n\n
const { 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\n

Para trabalhar com o serviço em nuvem Elastic Cloud, use o parâmetro cloud.id e auth.apiKey.

\n\n

Trabalhando com índices

\n\n

Um índice no Elasticsearch é análogo a um banco de dados em SGBDs relacionais. Vamos ver as operações principais.

\n\n

Criação de índice

\n\n
async 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 criado:', response);\n}
\n\n

Exclusão de índice

\n\n
async function deleteIndex() {\n  await client.indices.delete({ index: 'products' });\n  console.log('Índice excluído');\n}
\n\n

Adicionando e atualizando documentos

\n\n

Um documento é a unidade básica de dados no Elasticsearch. Vamos adicionar alguns registros ao índice products:

\n\n
async function addDocuments() {\n  const doc1 = {\n    title: 'Notebook Apple MacBook Pro',\n    description: 'Notebook potente para desenvolvedores e designers',\n    price: 2499.99,\n    created_at: new Date()\n  };\n\n  const doc2 = {\n    title: 'Teclado mecânico Logitech',\n    description: 'Teclado sem fio com iluminação',\n    price: 149.99,\n    created_at: new Date()\n  };\n\n  // Adicionando com ID especificado\n  await client.index({\n    index: 'products',\n    id: '1',\n    body: doc1\n  });\n\n  // Adicionando sem ID (geração automática)\n  await client.index({\n    index: 'products',\n    body: doc2\n  });\n\n  // Gravação forçada no disco\n  await client.indices.refresh({ index: 'products' });\n}
\n\n

Para atualização parcial, use o método update:

\n\n
await client.update({\n  index: 'products',\n  id: '1',\n  body: {\n    doc: {\n      price: 2399.99\n    }\n  }\n});
\n\n

Busca de dados

\n\n

O Elasticsearch fornece uma DSL poderosa para construir consultas. Vejamos alguns exemplos.

\n\n

Busca em texto completo

\n\n
async 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                    

Recommendations