SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
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 Trabalhos
Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 2 / 26
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
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
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
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
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
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, "á" => "´a")
pattern replace (regular expression)
Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 8 / 26
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
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
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
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
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
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
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
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
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
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
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": {
"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
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
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
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
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
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
Obrigado
www.emergi.net - pmusa@emergi.net
“Keep it simple, but not simpler.”

Contenu connexe

Tendances

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoGabriela Ferrara
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeGabriela Ferrara
 
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...Luiz Henrique Zambom Santana
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixJanssen Lima
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010lucashungaro
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusLeonn Leite
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 

Tendances (20)

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
 
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do Zabbix
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Implementação de
Implementação de Implementação de
Implementação de
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopus
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 

Similaire à How to use Elasticsearch Analyzers by EmergiNet

[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...
[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...
[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...Jozias Rolim
 
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...[Case machine learning- iColabora]Text Mining - classificando textos com Elas...
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...Jozias Rolim
 
Machine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceMachine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceLuca Bastos
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoApresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoJunior Grossi
 
08/12 Relatórios e Operadores
08/12 Relatórios e Operadores08/12 Relatórios e Operadores
08/12 Relatórios e OperadoresCícera Malheiro
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Mauro Baraldi
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Javathomasdacosta
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XMLiMasters
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPLuiz Henrique Zambom Santana
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...Aryel Tupinambá
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQLJuliano Atanazio
 
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textualPGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textualPGDay Campinas
 

Similaire à How to use Elasticsearch Analyzers by EmergiNet (20)

Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...
[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...
[Case Machine Learning- iColabora]Text mining - Classificando textos com Elas...
 
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...[Case machine learning- iColabora]Text Mining - classificando textos com Elas...
[Case machine learning- iColabora]Text Mining - classificando textos com Elas...
 
Machine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceMachine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ce
 
AULA-02.pdf
AULA-02.pdfAULA-02.pdf
AULA-02.pdf
 
Owasp web app_flaws
Owasp web app_flawsOwasp web app_flaws
Owasp web app_flaws
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoApresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
 
08/12 Relatórios e Operadores
08/12 Relatórios e Operadores08/12 Relatórios e Operadores
08/12 Relatórios e Operadores
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8
 
Pythonbrasil8
Pythonbrasil8Pythonbrasil8
Pythonbrasil8
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
SAAS - Search as a Service 2017
SAAS - Search as a Service 2017SAAS - Search as a Service 2017
SAAS - Search as a Service 2017
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XML
 
teste
testeteste
teste
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
 
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textualPGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
 

How to use Elasticsearch Analyzers by EmergiNet

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Problemas Ordenar Aggregation SEO (Search Engine Optimization) Pablo Musa (EmergiNet) Analyzers 05 de Maio de 2014 19 / 26
  • 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. 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. 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. 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. 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. 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. Obrigado www.emergi.net - pmusa@emergi.net “Keep it simple, but not simpler.”