Upload
luiz-henrique-zambom-santana
View
121
Download
1
Embed Size (px)
Citation preview
Conceitos avançados de Elasticsearch
Luiz Henrique Zambom Santana
24 de Fevereiro de 2015
Agenda
• Busca filtered
• Multifields• Mapeamento• Busca
• Buscas avançadas• Fields• Agregações• Highlight• Boost vs. Sort
• Cliente PHP
• Problemas comuns
Buscas - FilteredPOST /indice/post/_search
{
"query": {
"filtered": {
"query": {
"match": {
"relator": "ANTONIO"
}
},
"filter": {
"range": {
“data": {
“lte": "now - 1d / d"
}
}
}
}
}
}
Multifields - MapeamentoPOST /indice/post/_mapping
{
"processo": {
"properties": {
…
"descricao": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
},
…
}
}
Multifields - Busca
POST /indice/post/_search
{
"query": {
"match": {
"assunto.raw": "CONTRATO/REGISTRO"
}
}
}
Buscas
• Fields
• Fuziness
• Ordenação
• Paginação
• Boost
• Agregações
• Suggestions
POST /indice/post/_search
{
"fields" : "descricao",
"from" : 0, "size" : 10,
"sort" : [
"_score",
“data",
“relator"
],
"query": {
"filtered": {
"query": {
"match": {
Fields
• Forma de diminuir a quantidade de dados na rede
POST /indice/post/_search
{
"fields" : "descricao, relator",
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"
}
}
}
Highlight
POST /indice/post/_search
{
"query": {
…
},
"aggregations": {
…
},
"highlight" : {
"fields" : {
"descricao" : {"force_source" : true}
}
}
}
Paginação
POST /indice/post/_search
{
"fields" : "descricao",
"from" : 0, "size" : 10,
"sort" : [
Sort
POST /indice/post/_search
{
"fields" : "descricao",
"from" : 0, "size" : 10,
"sort" : [
"_score",
“data",
“relator"
],
Boost
"must": [
{
"prefix": {
"relator": "ANTONIO",
"boost": "500"
}
}
],
Suggestions
…
"suggest": {
"my-suggestion": {
"text": "carro",
"term": {
"field": "descricao"
}
}
}
Fuzziness
…
"query": {
"match": {
"descricao": "caro",
"fuzziness": "1"
}
},
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
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
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
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
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
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
Problemas comuns
• Configurações gerais• Memória
• Metade do disponível da máquina
• Evitar swap (bootstrap.mlockall: true)
• Não utilizar multicast
Outros tópicos
• Dados geográficos
• Imagens
?