Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

ElasticSearch com Node.js Kirmayr Tomaz

Slide 3

Slide 3 text

Sobre mim Kirmayr Tomaz ● De Manaus/AM ● Bacharel em Sistemas de Informação - UFAM ● Organizador do Femug-AM ● Mentor no Traning Center @kirmayrtomaz [email protected]

Slide 4

Slide 4 text

Sobre mim Kirmayr Tomaz ● De Manaus/AM ● Bacharel em Sistemas de Informação - UFAM ● Organizador do Femug-AM ● Mentor no Traning Center @kirmayrtomaz [email protected]

Slide 5

Slide 5 text

O que é o elasticsearch ? ● Desenvolvido por Shay Banon ● Uma camada acima do Apache Lucene ● Feito em Java ● Orientado a Documento ● Full-Text Search

Slide 6

Slide 6 text

O que é o elasticsearch ? ● API REST ● JSON ● Open Source ● Real Time ● Distribuído ● Escalavel ● Analytics ● Big Data

Slide 7

Slide 7 text

SQL resolve?

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

NoSql resolve?

Slide 10

Slide 10 text

elasticSearch RDS

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Por que utilizar ? - Conhecer aprofundadamente algoritmos de busca em texto geram uma complexidade alta para o projeto - Nós como consultores precisamos oferecer soluções rápidas e escaláveis - Projeto Open Source - Saas - AWS possui um serviço próprio do elasticSearch

Slide 15

Slide 15 text

Casos de Sucesso

Slide 16

Slide 16 text

Casos de sucesso - Github ● Como satisfazer a busca dos 4 milhões de usuários da GitHub ● Indexa 8 milhões de repositórios com mais de 2 bilhões https://www.elastic.co/use-cases/github "A busca é o núcleo do GitHub", diz Tim Pease, engenheiro de operações da GitHub. "Se você acessa o GitHub.com/search, pode pesquisar por meio de repositórios, usuários, problemas, solicitações de envio e código-fonte".

Slide 17

Slide 17 text

Casos de sucesso - Tinder ● Quais pessoas um usuário deslize diretamente ● Quais pessoas irão deslizar diretamente para esse usuári ● quando houver uma correspondência de deslocamento mútuo. https://www.elastic.co/elasticon/conf/2017/sf/tinder -using-the-elastic-stack-to-make-connections-arou nd-the-world

Slide 18

Slide 18 text

Casos de sucesso - Tinder ● Quais pessoas um usuário deslize diretamente ● Quais pessoas irão deslizar diretamente para esse usuári ● quando houver uma correspondência de deslocamento mútuo. https://www.elastic.co/elasticon/conf/2017/sf/tinder -using-the-elastic-stack-to-make-connections-arou nd-the-world

Slide 19

Slide 19 text

Casos de sucesso - Tinder ● Ajuda a identificar problemas potenciais cedo, ● Permite-lhes saber quais os recursos do jogo que estão funcionando melhor (ou não o melhor ...) ● Melhora todo o "tempo de percepção" https://www.elastic.co/elasticon/conf/2017/sf/buildi ng-a-near-real-time-pipeline-for-all-things-blizzard

Slide 20

Slide 20 text

Conceitos

Slide 21

Slide 21 text

Index invertido const fato = ["cada","minuto","mais","um","framework","javascript","foi","lançado"] const verdade = ["javascript","é","maior","que","java"] const naoAcredita =["java","não","é","lento"]

Slide 22

Slide 22 text

Indexe invertido ● Pesquisando a palava javascript ● Pesquisando a palavra java ● Pesquisando a palava javascript e java [ { "string":"javascript", "documents": ['fato','verdade'] },{ "string":"java", "documents": ['naoAcredita','verdade'] },{ "string":"minutos", "documents": ['fato'] } //... ]

Slide 23

Slide 23 text

Taxonomia

Slide 24

Slide 24 text

Tokenização Standart POST user_agents/_analyze { "analyzer": "standard", "text": "joao mario" }

Slide 25

Slide 25 text

Tokenização LowerCase POST _analyze { "tokenizer": "lowercase", "text": "João Mário" }

Slide 26

Slide 26 text

Tokenização WhiteSpace POST _analyze { "tokenizer": "whitespace", "text": "João Mário" }

Slide 27

Slide 27 text

Tokenização UAX_URL_EMAIL POST _analyze { "tokenizer": "uax_url_email", "text": "[email protected] cachorro teste" }

Slide 28

Slide 28 text

Tokenização Ngram POST _analyze { "tokenizer": "ngram", "text": "Concrete Solutions" }

Slide 29

Slide 29 text

Tokenização edge_ngram POST _analyze { "tokenizer": "edge_ngram", "text": "Concrete Solutions" }

Slide 30

Slide 30 text

Index yield searchClient.indices.create({ index: 'fixed_incomes', body: { 'settings': { 'analysis': { 'analyzer': { 'partialAnalyzer': { 'type': 'custom', 'tokenizer': 'ngram_tokenizer', 'filter': [ 'asciifolding', 'lowercase' ] }, 'searchAnalyzer': { 'type': 'custom', 'tokenizer': 'standard', 'filter': [ 'asciifolding', 'lowercase' ] }

Slide 31

Slide 31 text

'mappings': { 'blog': { 'properties': { 'emitter': { 'fielddata': true, 'type': 'text', 'analyzer': 'partialAnalyzer', 'search_analyzer': 'searchAnalyzer' }, ....

Slide 32

Slide 32 text

Index , 'mappings': { 'blog': { 'properties' : { 'indexAndRate' : { 'properties' : { 'percentIndexValue' : { 'type': 'half_float' }, 'percentIndexMaxValue' : { 'type': 'half_float' } } } } } }

Slide 33

Slide 33 text

Index const pessoaBulk = [{ index: { _index: 'pessoa', _type: 'blog', _id: pessoa.id } }, { id: pessoa.id, name: pessoa.name, rateFunding: pessoa.rateFunding, liquidity: pessoa.liquidity }] yield searchClient.bulk({ Body: pessoaBulk })

Slide 34

Slide 34 text

Busca GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } } https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

Slide 35

Slide 35 text

Busca GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } }, "highlight": { "fields": { "title": {} } } https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

Slide 36

Slide 36 text

Busca GET /_search { "query": { "bool": { "from": 0. "size": {}, "limit": {}, "_source": [ "id", "name", "idade" ], "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, ] } } https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

Slide 37

Slide 37 text

Experiência no dia-a-dia

Slide 38

Slide 38 text

Obrigado

Slide 39

Slide 39 text

Referência Indixe invertido - http://www.facom.ufu.br/~miani/site/teaching_files/ori/T%C3%B3pico%208%20-%20%C3%8 Dndice%20invertido.pdf Elasticsearch - https://www.infoq.com/br/presentations/utilize-todo-o-poder-do-wlasticsearch https://www.ibm.com/developerworks/br/java/library/os-apache-lucenesearch/index.html https://www.sitepoint.com/search-engine-node-elasticsearch/ https://www.compose.com/articles/getting-started-with-elasticsearch-and-node/ http://blog.caelum.com.br/buscas-eficientes-com-elasticsearch/ https://github.com/appbaseio/dejavu

Slide 40

Slide 40 text

Centro Av. Presidente Wilson, 231 - 29º andar (21) 2240-2030 Cidade Monções Av. Nações Unidas, 11.541 - 3º andar (11) 4119-0449 Savassi Av. Getúlio Vargas, 671 Sala 800 - 8º andar (31) 3360-8900 www.concrete.com.br