# Elasticsearch

## Introdução

Elasticsearch é um mecanismo de busca e análise distribuído, de código aberto, baseado na biblioteca Apache Lucene. É conhecido por sua velocidade, escalabilidade e capacidade de processar grandes volumes de dados em tempo quase real.

> [!NOTA] Versatilidade do Elasticsearch 
> Além de busca, o Elasticsearch é amplamente utilizado para análise de logs, monitoramento de desempenho, análise de segurança e muito mais.

## Características Principais

- Busca e análise em tempo quase real
- Distribuído e altamente escalável
- Suporte a múltiplos tipos de dados
- RESTful API
- Esquema flexível (schema-free)
- Agregações e análises avançadas

## Instalação

### Docker

```bash
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:latest
```

### Linux

```bash
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.15.0-linux-x86_64.tar.gz
cd elasticsearch-7.15.0/bin
./elasticsearch
```

## Conceitos Fundamentais

1. **Índice**: Coleção de documentos relacionados
2. **Documento**: Unidade básica de informação que pode ser indexada
3. **Nó**: Uma instância do Elasticsearch
4. **Cluster**: Grupo de um ou mais nós
5. **Shard**: Subdivisão de um índice

## Operações Básicas

### Criar um Índice

```http
PUT /meu_indice
```

### Indexar um Documento

```http
POST /meu_indice/_doc
{
  "titulo": "Exemplo de Documento",
  "conteudo": "Este é um exemplo de conteúdo."
}
```

### Buscar Documentos

```http
GET /meu_indice/_search
{
  "query": {
    "match": {
      "conteudo": "exemplo"
    }
  }
}
```

## Casos de Uso

1. **Mecanismo de Busca para Websites**
    
    - Implementar busca rápida e relevante em grandes volumes de conteúdo
2. **Análise de Logs**
    
    - Centralizar e analisar logs de múltiplos sistemas
3. **Monitoramento de Aplicações**
    
    - Coletar e analisar métricas de desempenho em tempo real
4. **Análise de Dados de Negócios**
    
    - Realizar análises complexas em grandes conjuntos de dados

## Arquitetura Típica

```mermaid
graph TD
    A[Aplicação Cliente] --> B[Load Balancer]
    B --> C[Nó Elasticsearch 1]
    B --> D[Nó Elasticsearch 2]
    B --> E[Nó Elasticsearch 3]
    C --- F[Armazenamento]
    D --- F
    E --- F
    G[Kibana] --> B
    H[Logstash] --> B
```

## Configuração Avançada

### Configuração de Cluster

Edite `elasticsearch.yml`:

```yaml
cluster.name: meu-cluster-es
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["host1", "host2"]
cluster.initial_master_nodes: ["node-1"]
```

### Configuração de Índice

```http
PUT /meu_indice
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "titulo": { "type": "text" },
      "conteudo": { "type": "text" },
      "data": { "type": "date" }
    }
  }
}
```

## Monitoramento e Gerenciamento

- Use Kibana para visualização e gerenciamento
- Monitore a saúde do cluster com o endpoint `/_cluster/health`
- Utilize ferramentas como Elastic Stack Monitoring

## Otimização de Desempenho

1. Ajuste o tamanho do heap da JVM
2. Otimize mapeamentos de campos
3. Use bulk operations para indexação em massa
4. Configure sharding adequadamente para o seu caso de uso

## Troubleshooting Comum

1. **Cluster Yellow/Red**: Verifique alocação de shards e espaço em disco
2. **Consultas Lentas**: Analise logs de consultas lentas e otimize índices
3. **Out of Memory**: Ajuste configurações de JVM e verifique uso de memória

## Comparação com Outras Tecnologias

|TECNOLOGIA|VANTAGENS|DESVANTAGENS|
|---|---|---|
|Elasticsearch|Rápido, escalável, análise em tempo real|Complexidade de configuração|
|Solr|Maduro, rico em recursos|Menos flexível em esquema|
|MongoDB|Fácil de usar, bom para dados não estruturados|Menos poderoso em busca full-text|

## Integração com Ecossistema

- **Logstash**: Para ingestão e transformação de dados
- **Kibana**: Para visualização e exploração de dados
- **Beats**: Para coleta de dados de diversas fontes

## Considerações de Segurança

1. Implemente autenticação e autorização (X-Pack Security)
2. Use SSL/TLS para comunicações
3. Aplique princípio de menor privilégio para usuários e roles
4. Mantenha o Elasticsearch e suas dependências atualizados

## Melhores Práticas

1. Planeje a estrutura de índices cuidadosamente
2. Use aliases de índice para facilitar a manutenção
3. Implemente rotação de índices para dados com séries temporais
4. Faça backup regular dos dados e configurações

## Recursos Adicionais

- [Documentação Oficial do Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)

## Considerações Finais

Elasticsearch é uma ferramenta poderosa e versátil para busca e análise de dados. Sua capacidade de lidar com grandes volumes de dados em tempo quase real o torna ideal para uma ampla gama de aplicações, desde mecanismos de busca até análise de logs e monitoramento de sistemas. A flexibilidade e escalabilidade do Elasticsearch, combinadas com o rico ecossistema da Elastic Stack, oferecem soluções robustas para diversos desafios de dados e análises.

## Etiquetas

#Elasticsearch #SearchEngine #DataAnalysis #BigData #DistributedSystems

## Leia Também

- [[backup do sistema|Backup do Sistema]]
- [[grupos de backup|Grupos de Backup]]
- [[mariadb|MariaDB]]