Analyzers
Pablo Musa
EmergiNet
05 de Maio de 2014
Outline
1 Motiva¸c˜ao
2 Elasticsearch e EmergiNet
3 Conceitos B´asicos
4 Criando um Analisador
5 Problemas Comuns
6 Outros...
Motiva¸c˜ao
Caso de Uso
Site de compras
“Full text search” em SQL ´e complexo e lento
Necessidade de um sistema de busca:
...
Elasticsearch
R´apido (em m´edia 100x)
Resultados excelentes
F´acil de consumir
Instala¸c˜ao muito simples e escal´avel
AP...
Elasticsearch e EmergiNet
Nem sempre o padr˜ao ´e o melhor
Ningu´em conhece melhor seus dados do que vocˆe
Mapping persona...
Elasticsearch
Empty Index
{
"settings": {
"analysis": {
"filter": {
},
"analyzer": {
"my_analyzer": {
"type": "",
"char_fi...
Etapas de um analisador
1 Arrumar
2 Quebrar
3 Normalizar
Elasticsearch oferece analisadores pr´e-definidos
Por exemplo: sta...
Arrumar
Character Filters
“Pr´e-processamento”
Limpeza da string
Opcional
Atualmente existem 3 tipos:
mapping (ex: "ph" =>...
Arrumar
Analysis with Character Filters
"analysis": {
"filter": {
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"cha...
Quebrar
Tokenizers
“Processamento”
Quebra da string em termos individuais
Obrigat´orio
Atualmente existem 10 tipos:
standa...
Quebrar
Analysis with Character Filters and Tokenizers
"analysis": {
"filter": {
},
"analyzer": {
"my_analyzer": {
"type":...
Normalizar
Token Filters
“P´os-processamento”
Normalizar os tokens (alterar ou remover)
Opcional
Atualmente existem 33 tip...
Normalizar
Analysis Complete
"analysis": {
"filter": {
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_filter": ...
Normalizar
stop token filter
Stop Words
Remove palavras indesejadas
´E baseado em uma lista de palavras e deve ser criado m...
Normalizar
Analysis Complete with stop words
"analysis": {
"filter": {
"stop_noise": {
"type": "stop",
"stopwords_path": "...
Normalizar
stemmer token filter
Stemmer (deriva¸c˜oes)
“Trava” as palavras ("jogar"=>"joga" ou "jogar" =>"jog")
´E baseado ...
Normalizar
Analysis Complete with stop words and stemmer
"analysis": {
"filter": {
"stop_noise": {
"type": "stop",
"stopwo...
One Field Mapping
"mappings": {
"my_type": {
"properties": {
"title": {
"type": "string",
"index": "analyzed",
"analyzer":...
Problemas
Ordenar
Aggregation
SEO (Search Engine Optimization)
Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 19 / 26
Problemas
Ordena¸c˜ao
Ordena¸c˜ao em campos indexados gera resultados aleat´orios
"Telha" < "casa"
Novo analisador
"sort":...
Problemas
Aggregation
Como funciona: ”sao”, ”paulo”, ”rio”
O que queremos: ”S˜ao Paulo”
Ou seja, n˜ao queremos an´alise
Pa...
Problemas
Search Engine Optimization
Stemmer ´e ruim
Novo analisador
"url_analyzer": {
"type": "custom",
"char_filter": [
...
Problemas
Search Engine Optimization
N˜ao precisamos mape´a-lo para um field
analyze API
curl -XPOST "http://localhost:9200...
Resultado
{
"settings": {
"analysis": {
"filter": {
"stop_noise": {
"type": "stop",
"stopwords_path": "sw.txt"
},
"light_p...
Outros Trabalhos
Boost
Parent/Child
Armazenamento de Logs (Logstash + Kibana)
Consultoria de infra estrutura para ELK
Pabl...
Obrigado
www.emergi.net - pmusa@emergi.net
“Keep it simple, but not simpler.”
Próximos SlideShares
Carregando em…5
×

How to use Elasticsearch Analyzers by EmergiNet

4.510 visualizações

Publicada em

Presentation ( em Português - Brasil) about how to use Elasticsearch analyzers to boost your searches. The content was exhibited in Elasticsearch Meetup in Rio de Janeiro and Porto Alegre by Pablo Musa from EmergiNet.

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.510
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3.055
Ações
Compartilhamentos
0
Downloads
10
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

How to use Elasticsearch Analyzers by EmergiNet

  1. 1. Analyzers Pablo Musa EmergiNet 05 de Maio de 2014
  2. 2. Outline 1 Motiva¸c˜ao 2 Elasticsearch e EmergiNet 3 Conceitos B´asicos 4 Criando um Analisador 5 Problemas Comuns 6 Outros Trabalhos Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 2 / 26
  3. 3. Motiva¸c˜ao Caso de Uso Site de compras “Full text search” em SQL ´e complexo e lento Necessidade de um sistema de busca: mais r´apido mais preciso mais simples de desenvolver Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 3 / 26
  4. 4. Elasticsearch R´apido (em m´edia 100x) Resultados excelentes F´acil de consumir Instala¸c˜ao muito simples e escal´avel API RESTful simples utilizando JSON “Schema ´e autom´atico” Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 4 / 26
  5. 5. Elasticsearch e EmergiNet Nem sempre o padr˜ao ´e o melhor Ningu´em conhece melhor seus dados do que vocˆe Mapping personalizado EmergiNet solu¸c˜ao de consultoria ou execu¸c˜ao de projetos Otimizar a aplica¸c˜ao e incluir funcionalidades 1 Ordena¸c˜ao 2 Aggregations 3 Auto-Complete, Suggester 4 Auxiliar no SEO (Search Engine Optimization) Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 5 / 26
  6. 6. Elasticsearch Empty Index { "settings": { "analysis": { "filter": { }, "analyzer": { "my_analyzer": { "type": "", "char_filter": [], "tokenizer": "", "filter": [] } } } }, "mappings": { "my_type": { "properties": { "title": { "type": "", "index": "", "analyzer": "" } } } } } “Empty” analysis and mappings. Example of the structure to be fulfilled. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 6 / 26
  7. 7. Etapas de um analisador 1 Arrumar 2 Quebrar 3 Normalizar Elasticsearch oferece analisadores pr´e-definidos Por exemplo: standard, simple, whitespace, language Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 7 / 26
  8. 8. Arrumar Character Filters “Pr´e-processamento” Limpeza da string Opcional Atualmente existem 3 tipos: mapping (ex: "ph" => "f") html strip (removes tags and maps entities, "&aacute;" => "´a") pattern replace (regular expression) Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 8 / 26
  9. 9. Arrumar Analysis with Character Filters "analysis": { "filter": { }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "", "filter": [] } } } Analysis with character filter function only. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 9 / 26
  10. 10. Quebrar Tokenizers “Processamento” Quebra da string em termos individuais Obrigat´orio Atualmente existem 10 tipos: standard keyword whitespace ngram, edge ngram letter, lowercase (opt), pattern, uax email url, path hierarchy Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 10 / 26
  11. 11. Quebrar Analysis with Character Filters and Tokenizers "analysis": { "filter": { }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [] } } } Analysis with character filter and tokenizer function. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 11 / 26
  12. 12. Normalizar Token Filters “P´os-processamento” Normalizar os tokens (alterar ou remover) Opcional Atualmente existem 33 tipos: ascii folding lowercase, uppercase stop stemmer ngram, edge ngram, length, snowball, synonym, ... Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 12 / 26
  13. 13. Normalizar Analysis Complete "analysis": { "filter": { }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "asciifolding" ] } } } Analysis using all functions. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 13 / 26
  14. 14. Normalizar stop token filter Stop Words Remove palavras indesejadas ´E baseado em uma lista de palavras e deve ser criado manualmente "stop_noise": { "type": "stop", "stopwords_path": "sw.txt" } "stop_noise": { "type": "stop", "stopwords": ["o", "a", "no", "na","de","da", "as","os"] } Stop word token filter definition. ignore case and remove trailing are boolean settings. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 14 / 26
  15. 15. Normalizar Analysis Complete with stop words "analysis": { "filter": { "stop_noise": { "type": "stop", "stopwords_path": "sw.txt" } }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "stop_noise", "asciifolding" ] } } } Analysis using all functions and my own stop words filter. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 15 / 26
  16. 16. Normalizar stemmer token filter Stemmer (deriva¸c˜oes) “Trava” as palavras ("jogar"=>"joga" ou "jogar" =>"jog") ´E baseado em um conjunto j´a existente, mas deve ser criado manualmente "my_stemmer": { "type": "stemmer", "name": "light_portuguese" } Stemmer token filter definition. minimal portuguese and portuguese are other portuguese options. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 16 / 26
  17. 17. Normalizar Analysis Complete with stop words and stemmer "analysis": { "filter": { "stop_noise": { "type": "stop", "stopwords_path": "sw.txt" }, "light_pt": { "type": "stemmer", "name": "light_portuguese" }, }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "stop_noise", "asciifolding", "light_pt" ] } } } Analysis using all functions, with my own stop words and light portuguese stemmer filters. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 17 / 26
  18. 18. One Field Mapping "mappings": { "my_type": { "properties": { "title": { "type": "string", "index": "analyzed", "analyzer": "my_analyzer", } } } } Simple mapping with one string field using my analyzer. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 18 / 26
  19. 19. Problemas Ordenar Aggregation SEO (Search Engine Optimization) Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 19 / 26
  20. 20. Problemas Ordena¸c˜ao Ordena¸c˜ao em campos indexados gera resultados aleat´orios "Telha" < "casa" Novo analisador "sort": { "type": "custom", "tokenizer": "keyword", "filter": [ "lowercase", "asciifolding" ] } Sort analyzer. Makes use of lowercase and asciifolding filters and the keyword tokenizer. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 20 / 26
  21. 21. Problemas Aggregation Como funciona: ”sao”, ”paulo”, ”rio” O que queremos: ”S˜ao Paulo” Ou seja, n˜ao queremos an´alise Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 21 / 26
  22. 22. Problemas Search Engine Optimization Stemmer ´e ruim Novo analisador "url_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "stop_noise", "asciifolding" ] } URL analyzer for SEO. It will not be used in mappings. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 22 / 26
  23. 23. Problemas Search Engine Optimization N˜ao precisamos mape´a-lo para um field analyze API curl -XPOST "http://localhost:9200/my_index/_analyze?analyzer=my_analyzer" -d ’{ "O Meetup Elasticsearch RJ ser´a no dia 05 de maio as 18h." }’ > meetup elasticsearch rj sera dia 05 maio 18h analyze API Example. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 23 / 26
  24. 24. Resultado { "settings": { "analysis": { "filter": { "stop_noise": { "type": "stop", "stopwords_path": "sw.txt" }, "light_pt": { "type": "stemmer", "name": "light_portuguese" } }, "analyzer": { "my_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "stop_noise", "asciifolding", "light_pt" ] }, "sort": { "type": "custom", "tokenizer": "keyword", "filter": [ "lowercase", "asciifolding" ] }, "url_analyzer": { "type": "custom", "char_filter": [ "html_strip" ], "tokenizer": "standard", "filter": [ "lowercase", "stop_noise", "asciifolding" ] } } } }, "mappings": { "my_type": { "properties": { "title": { "type": "string", "index": "analyzed", "analyzer": "my_analyzer", "fields": { "sort": { "type": "string", "index": "analyzed", "analyzer": "sort" }, "raw": { "type": "string", "index": "not_analyzed" } } } } } } } Complete mapping for one field using sub-fields to text search, sort, and aggregation. Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 24 / 26
  25. 25. Outros Trabalhos Boost Parent/Child Armazenamento de Logs (Logstash + Kibana) Consultoria de infra estrutura para ELK Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 25 / 26
  26. 26. Obrigado www.emergi.net - pmusa@emergi.net “Keep it simple, but not simpler.”

×