O documento apresenta uma introdução aos conceitos avançados do Elasticsearch, incluindo: (1) buscas filtered para combinar consultas e filtros, (2) multifields para indexação e busca em campos diferentes, e (3) agregações para resumir resultados de buscas agrupados por campos.
7. Fields
• Forma de diminuir a quantidade de dados na rede
POST /indice/post/_search
{
"fields" : "descricao, relator",
8. Agregações
• Agregações são comparáveis ao GROUP BY do SQL
• Exemplo, agregar por relator:
"query": {
"match": {
"descricao": "carro"
}
},
"aggregations": {
"descricao_agg": {
"terms": {
"field": "descricao.raw"
}
}
}
15. Cliente PHP
• Não use um cliente HTTP padrão com o Guzzle!
• Use o cliente oficial
• https://www.elastic.co/guide/en/elasticsearch/client/php-
api/current/index.html
• Vide
• http://www.devmedia.com.br/elasticsearch-desenvolvendo-big-data-com-
php/31609
16. Processamento de logs
• Logstash e Kibana
• Plugins do Elasticsearch, formam juntos o ELK
• Vide:
• http://pt.slideshare.net/LuizHenriqueZambomSa/elasticsearch-como-gerenciar-seus-
logs-com-logstash-e-kibana
• Usa o GROK para unificar a visão sobre logs
• Envia os dados para o Elasticsearch
• Visualiza no Kibana
17. Problemas comuns
• Rede e instalação
• Modificar o nome do cluster, o padrão é “elasticsearch”
• Não deixar o mesmo nome em produção, QA e desenvolvimento, pois os clusters podem
se “fundir”:
• Developer liga a máquina
• Nó local se une ao cluster
• Migração de shards
• Developer desliga a máquina
• Cluste em red state, com dados perdidos
18. Problemas comuns
• Pouca relevância de resultados
• Revisar boost
• Modificar analisadores
• Usar inquisitor!!!
• Colocar os filtros no início
• Desempenho de indexação
• Diminuir número de réplicas
• Analisadores
• Evitar merging de segmentos ("indices.store.throttle.type" : "none“). Conforme os dados vão sendo alterados
no ES, novos segmentos vao sendo criados. Casa segmento consome memória e ciclos de CPU, mas unificá-los
é um processo caro. Depois do bulk chamar a otimização para forçar o merging.
• Usar Marvel
• Aumentar número de threads até EsRejectedExecutionException
• Desabilitar campo _all
• index.translog.flush_threshold_size para 1gb (o padrão é 200mb) para evitar escrita
19. Problemas comuns
• Desempenho de busca
• Cache (priorizar o uso de filters)
• Fields:
• Armazena valores de campos
• Usado principalmente para agregação e ordenação (menos importante para TA)
• Shard query (1.4.*):
• Armazena resultados de consultas por shard
• Filter (LRU):
• Mais importante! Armazena resultados de filtros
• indices.cache.filter.size (porcentagem do tamanho de memória)
• Aumentar número de réplicas e shards (múltiplo do número de nós)
• Analisadores (causam uso de CPU)
• Aumentar o refresh interval
• Slowlog (otimizar busca)
• Verificar EsRejectedExecutionException no log
• Aumentar threadpool.search.queue_size, default 1000
20. Problemas comuns
• Alta disponibilidade
• Cluster ativo/ativo
• Split-brain
• Número de réplicas
• Réplicas migram para outros servidores
• Status do cluster
• Green: todos shards e réplicas ativos
• Yellow: algumas réplicas não estão ativas
• Red: shard não ativo
21. Problemas comuns
• Configurações gerais
• Memória
• Metade do disponível da máquina
• Evitar swap (bootstrap.mlockall: true)
• Não utilizar multicast