O Guia Definitivo para Gerenciar Índices do Elasticsearch via Comandos de API

Domine o gerenciamento de índices do Elasticsearch com este guia definitivo de comandos de API. Aprenda a criar meticulosamente índices com mapeamentos e configurações personalizadas usando `PUT`, visualize de forma abrangente suas configurações e detalhes com `GET`, e exclua com segurança índices desnecessários usando `DELETE`. Este artigo fornece exemplos práticos, melhores práticas e avisos cruciais, capacitando você a controlar efetivamente o ciclo de vida dos seus dados no Elasticsearch para um desempenho ideal e gerenciamento de recursos.

39 visualizações

O Guia Definitivo para Gerenciar Índices Elasticsearch via Comandos API

Elasticsearch é um motor de busca e análise distribuído e poderoso que organiza dados em índices. Um índice é essencialmente um namespace lógico que aponta para um ou mais shards físicos, onde seus documentos são armazenados. Gerenciar esses índices de forma eficaz é fundamental para manter um cluster Elasticsearch saudável, performático e escalável. Este guia irá conduzi-lo pelos comandos API essenciais para o gerenciamento do ciclo de vida dos índices, permitindo que você crie, inspecione e exclua índices com confiança.

O gerenciamento eficiente de índices é crítico por várias razões: ele permite definir como seus dados são armazenados e pesquisados, otimizar o desempenho configurando definições como shards e réplicas, e gerenciar o armazenamento removendo dados desatualizados ou desnecessários. Dominar esses comandos é uma habilidade fundamental para qualquer administrador ou desenvolvedor Elasticsearch, garantindo que sua infraestrutura de dados permaneça robusta e ágil.

Compreendendo os Índices Elasticsearch

Antes de mergulhar nos comandos API, é importante entender o que é um índice Elasticsearch. Em termos simples, um índice é como um banco de dados em um sistema de banco de dados relacional. É uma coleção de documentos que possuem características semelhantes e frequentemente um propósito comum. Cada documento dentro de um índice tem um tipo (embora em versões mais recentes do Elasticsearch, um único índice tipicamente representa um único tipo, frequentemente _doc) e um ID único. Os índices são compostos por um ou mais shards, que são índices Lucene de baixo nível autocontidos. Esses shards podem ser distribuídos por vários nós, proporcionando escalabilidade e tolerância a falhas.

Componentes chave de um índice incluem:
* Mapeamentos (Mappings): Definem o esquema para os documentos dentro de um índice, especificando nomes de campo, tipos de dados (por exemplo, text, keyword, date, integer) e como eles devem ser indexados.
* Configurações (Settings): Configuram vários aspectos operacionais, como o número de shards primários, shards de réplica, intervalos de atualização e configurações de análise.
* Aliases: Nomes virtuais que podem apontar para um ou mais índices, proporcionando flexibilidade para as aplicações interagirem com os índices sem conhecer seus nomes reais.

Criando Índices Elasticsearch

Criar um índice é o primeiro passo para armazenar dados no Elasticsearch. Você pode criar um índice com configurações padrão ou, mais comumente, definir mapeamentos e configurações personalizados adaptados aos seus dados e requisitos de pesquisa. O método PUT é usado para essa finalidade.

Criação Básica de Índices

Para criar um índice com configurações padrão, você simplesmente emite uma requisição PUT para o nome do índice desejado.

PUT /my_first_index

Após a criação bem-sucedida, o Elasticsearch retorna um reconhecimento:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "my_first_index"
}

Isso cria um índice com um shard primário e um shard de réplica por padrão, e o mapeamento dinâmico é habilitado (o que significa que o Elasticsearch inferirá os tipos de campo à medida que os documentos forem indexados).

Criando Índices com Mapeamentos e Configurações Personalizados

Para maior controle, você pode definir mapeamentos explícitos para seus campos e especificar configurações de índice, como o número de shards e réplicas. Isso é crucial para otimizar o desempenho da pesquisa e garantir a integridade dos dados.

Exemplo: Mapeamentos e Configurações Personalizados

Vamos criar um índice chamado products com tipos de campo específicos para dados de produtos e configurá-lo com 3 shards primários e 2 shards de réplica.

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      },
      "name": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "description": {
        "type": "text"
      },
      "price": {
        "type": "float"
      },
      "stock": {
        "type": "integer"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
      },
      "available": {
        "type": "boolean"
      }
    }
  }
}
  • settings: Define configurações de nível de cluster para o índice. Aqui, definimos number_of_shards e number_of_replicas.
  • mappings: Contém a definição do esquema. Definimos properties para cada campo:
    • product_id: Tipo keyword para correspondência exata.
    • name: text para pesquisa de texto completo, com um subcampo keyword adicional (name.raw) para ordenação exata ou agregações.
    • description: text para pesquisa de texto completo.
    • price: float para operações numéricas.
    • stock: integer para operações numéricas.
    • created_at: date com formatos especificados para garantir a análise correta.
    • available: boolean para valores verdadeiro/falso.

Dica: Planeje cuidadosamente seus mapeamentos. Uma vez que um índice é criado e preenchido, não é possível alterar diretamente o tipo de dado de um campo existente sem reindexar seus dados. Planeje com antecedência seus tipos de dados e necessidades analíticas.

Visualizando Detalhes e Configurações do Índice

Após criar um índice, você frequentemente precisará inspecionar sua configuração para confirmar as configurações, verificar os mapeamentos ou solucionar problemas. O comando GET é sua ferramenta principal para recuperar informações abrangentes sobre um índice.

Recuperando Todas as Informações do Índice

Para obter todas as configurações, mapeamentos, aliases e outros metadados de um índice específico, use o comando GET com o nome do índice.

GET /products

Isso retornará um grande objeto JSON contendo informações detalhadas, incluindo:

{
  "products": {
    "aliases": {},
    "mappings": {
      "properties": {
        "available": {
          "type": "boolean"
        },
        "created_at": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
        },
        "description": {
          "type": "text"
        },
        "name": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "float"
        },
        "product_id": {
          "type": "keyword"
        },
        "stock": {
          "type": "integer"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "3",
        "provided_name": "products",
        "creation_date": "1701234567890",
        "number_of_replicas": "2",
        "uuid": "some_uuid",
        "version": {
          "created": "7170099"
        }
      }
    }
  }
}

Recuperando Informações Específicas do Índice

Você pode recuperar apenas partes específicas da configuração de um índice, anexando-as à URL.

  • Obter apenas mapeamentos:
    bash GET /products/_mapping

  • Obter apenas configurações:
    bash GET /products/_settings

  • Obter apenas aliases:
    bash GET /products/_alias

Essa recuperação focada é útil quando você está interessado apenas em um aspecto particular de um índice, tornando a saída mais gerenciável.

Visualizando Vários Índices

Você também pode recuperar informações para vários índices separando seus nomes com vírgulas ou usando curingas.

  • Múltiplos índices específicos:
    bash GET /products,my_first_index/_settings

  • Todos os índices começando com 'p':
    bash GET /p*/_mapping

  • Todos os índices (use com cautela em produção):
    bash GET /_all # ou GET /*

Nota: Ao usar GET /_all ou GET /*, esteja preparado para uma resposta potencialmente muito grande se seu cluster tiver muitos índices. Use-o com moderação, especialmente em ambientes de produção.

Excluindo Índices Elasticsearch

Excluir um índice é uma operação permanente que remove todos os documentos e metadados associados a ele. Isso é tipicamente feito para liberar espaço em disco, remover dados antigos ou limpar índices de teste. O método DELETE é usado para essa operação crítica.

Excluindo um Único Índice

Para excluir um único índice, use o comando DELETE seguido pelo nome do índice.

DELETE /my_first_index

Uma exclusão bem-sucedida retornará:

{
  "acknowledged": true
}

Aviso: Esta ação é irreversível. Uma vez que um índice é excluído, seus dados se foram para sempre, a menos que você tenha um snapshot ou backup. Sempre verifique o nome do índice antes de executar um comando DELETE, especialmente em ambientes de produção.

Excluindo Múltiplos Índices

Semelhante ao GET, você pode excluir vários índices especificando-os em uma lista separada por vírgulas ou usando curingas.

  • Excluindo múltiplos índices específicos:
    bash DELETE /my_old_index_1,my_old_index_2

  • Excluindo todos os índices que correspondem a um padrão:
    bash DELETE /logstash-2023-*
    Este comando excluiria todos os índices cujos nomes começam com logstash-2023-.

  • Excluindo todos os índices (cuidado extremo!):
    bash DELETE /_all # ou DELETE /*

    Perigo! Excluir _all ou * removerá cada índice do seu cluster. Esta é uma operação extremamente destrutiva e nunca deve ser realizada em um ambiente de produção, a menos que você explicitamente pretenda apagar seu cluster inteiro e tenha um plano de recuperação robusto. Muitos clusters de produção desabilitam essa funcionalidade para evitar a perda acidental de dados.

Melhores Práticas para Exclusão

  • Sempre verifique: Antes de excluir, use GET para inspecionar o índice (ou índices via curinga) que você pretende excluir. Isso confirma que você está visando os dados corretos.
    bash GET /logstash-2023-*
    Revise a saída e, se corresponder às suas expectativas, prossiga com o DELETE.
  • Permissões: Garanta que o usuário ou função que executa o comando DELETE tenha as permissões necessárias. Em um ambiente de produção, restrinja as permissões de DELETE apenas a pessoal autorizado.
  • Snapshots: Sempre tire um snapshot do seu cluster antes de realizar quaisquer exclusões em larga escala, especialmente se os dados forem críticos.

Comparação e Gerenciamento do Ciclo de Vida

Esses três comandos (PUT para criação, GET para inspeção, DELETE para remoção) formam a espinha dorsal do gerenciamento manual do ciclo de vida dos índices. Eles são usados em diferentes estágios:

  • Criação (PUT): No início da vida de um índice, definindo sua estrutura e configuração inicial.
  • Inspeção (GET): Ao longo da vida ativa de um índice, para monitoramento, solução de problemas e verificação.
  • Exclusão (DELETE): No final da vida útil de um índice, para recuperar recursos e gerenciar políticas de retenção de dados.

Embora esses comandos sejam excelentes para gerenciamento ad-hoc ou programático, o Elasticsearch também oferece recursos poderosos para gerenciamento automatizado do ciclo de vida do índice (ILM). As políticas ILM permitem definir regras para transicionar automaticamente os índices através de fases (quente, morno, frio, exclusão) com base na idade, tamanho ou outros critérios, incluindo operações como encolhimento, fusão forçada e, finalmente, exclusão. Para retenção de dados em larga escala ou de longo prazo, o ILM é a abordagem recomendada para automatizar a fase de DELETE.

Conclusão

Gerenciar índices Elasticsearch via comandos API é uma habilidade indispensável para qualquer pessoa que trabalhe com a plataforma. Você aprendeu como criar índices com mapeamentos e configurações precisos usando PUT, inspecionar minuciosamente suas configurações com GET e removê-los com segurança usando DELETE. Ao entender e aplicar corretamente esses comandos, você obtém controle granular sobre seu armazenamento de dados e pode garantir que seu cluster Elasticsearch permaneça eficiente, bem organizado e performático.

Sempre lembre-se da importância de um planejamento cuidadoso para os mapeamentos, verificação diligente antes da exclusão e aproveitamento dos recursos embutidos do Elasticsearch, como o ILM, para gerenciamento avançado e automatizado do ciclo de vida. Com essas ferramentas e melhores práticas, você estará bem equipado para dominar a administração de índices Elasticsearch. Para exploração adicional, aprofunde-se nas opções avançadas de mapeamento, modelos de índice e no poder total das políticas de gerenciamento do ciclo de vida de índices do Elasticsearch.