Download - Elasticsearch de dentro para fora
![Page 1: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/1.jpg)
Elasticsearch de dentro para fora
![Page 3: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/3.jpg)
3
![Page 4: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/4.jpg)
‘’“Elasticsearch is a search server based on Lucene. It provides a distributed, multitenant-capable full-text search engine with a RESTful web interface and schema-free JSON documents. Elasticsearch is developed in Java and is released as open source under the terms of the Apache License.”
Banon. Shay
4
![Page 5: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/5.jpg)
Índice invertido
Term Doc_1 Doc_2 Doc_3
Waldemar x x
Bicicleta x x x
Avião x
5
1. Score1.1. Bicicleta 31.2. Waldemar 21.3. Avião 1
![Page 6: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/6.jpg)
Overview do ecossistema6
CLUSTER
NODE
SHARD REPLICA
![Page 7: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/7.jpg)
Lucene7
![Page 8: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/8.jpg)
Como o Lucene vê os documentos
● O Lucene não separa tipos nem objetos.● O Lucene é apenas chave e valor.● Como os objetos são salvos
○ produto.nome = "test"
8
![Page 9: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/9.jpg)
o campo _source
O campo source é compactado e jogado no disco.
9
![Page 10: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/10.jpg)
o campo _all
O campo _all e fusão de todos os campos do documento em um só.
10
![Page 11: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/11.jpg)
Filter - Term level Query
11
![Page 12: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/12.jpg)
O que são filtros?
Filtros são a melhor forma para trabalhar com "valores exatos" pois eles acessam diretamente o nível do Lucene(term level).
12
![Page 13: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/13.jpg)
Quando usar filtros?
● Termos booleanos● Termos que não mudam● Termos que determinam regras● Ranges
13
![Page 14: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/14.jpg)
Caching
14
![Page 15: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/15.jpg)
O que é cache?
Resultados guardados em memória, desta maneira o shard não precisa calcular as resultados novamente nem fazer o calculo de relevância.
15
![Page 16: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/16.jpg)
TIPOS DE CACHE
● Shard-Level cache >= 1.4● Filter Cache
16
![Page 17: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/17.jpg)
Shard Level cache
Quando uma busca é executada dentro de um index, cada shard executa sua busca localmente e calcula seu resultado. Esse resultado é mesclado com o resultado global no coordinating node.
17
![Page 18: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/18.jpg)
Filter Caching
Filtros não calculam relevância e não passam por análise, dessa maneira eles podem ser cacheados pois na maioria das vezes eles devolvem o mesmo resultado.
18
![Page 19: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/19.jpg)
Filtros que não são cacheados
Alguns filtros não são cacheados por padrão pois são usados para buscas que mudam a cada chamada como por exemplo AND, OR e RANGE.
19
![Page 20: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/20.jpg)
Query
20
![Page 21: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/21.jpg)
O que são Queries?
● Queries determinam como a busca deve se comportar e garantem que o conteúdo buscado vai ser procurado e comparado da maneira certa.
● Elas conseguem calcular o quão relevante aquele resultado é para a busca que foi feita.
21
![Page 22: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/22.jpg)
Quando usar Queries?
● Quando relevância é importante● Quando é necessário mudar as regras do termo como
linguagens e sinônimos● Quando o full text search é importante● Quando analisar os termos é importante
22
![Page 23: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/23.jpg)
Query vs Filter
23
![Page 24: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/24.jpg)
Exemplo de Query e Filter juntos24
![Page 25: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/25.jpg)
Ordem de prioridade25
![Page 26: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/26.jpg)
score26
![Page 27: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/27.jpg)
Score
Score é relacionado a relevância do resultado de uma busca para com o que foi buscado. São usados dois padrões para determinar relevância em uma Query que são TF e IDF.
27
![Page 28: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/28.jpg)
TF - Term Frequency
_search?name=test{ "_id": 1,
"name": "this name is a test or not a test"}
2
28
![Page 29: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/29.jpg)
IDF - Inverse Document Frequency
_search?name=test{
"_id": 1,
"name": "this name is a test or not a test"
}, {
"_id": 2,
"name": "this name is a test"
}
2
1
29
![Page 30: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/30.jpg)
Field Lenght Norm
_search?name=test{
"_id": 1,
"name": "this name is a test or not a test"
}, {
"_id": 2,
"name": "this name is a test"
}
30
![Page 31: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/31.jpg)
Analyzers tem impacto?
31
![Page 32: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/32.jpg)
Pagination é bom?
32
![Page 33: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/33.jpg)
O PROBLEMA DO SIZE/FROM
● Cada shard calcula seu size● Cada shard gera seus próprios resultados limitados● Todos os resultados são mesclados no coordinator node● O shard precisa percorrer os dados
○ Imagine que queremos os resultados de 1010 até 1020
■ Cada shard vai produzir 1020 resultados○ O cordinator node vai receber 5100 resultados caso
tenha 5 shards■ Vai remover 5090 resultados para produzir
apenas 10.
33
![Page 34: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/34.jpg)
QUE TAL SCAN/SCROLL?
● A scroll api é usada pelo elastic para buscar grandes números de documentos.○ Uma busca por scroll permite que façamos uma busca inicial e continuemos
buscando até que não tenha mais resultados.■ Mais ou menos como um cursor em bancos de dados tradicionais
○ Depois da busca inicial ser feita as próximas não irão pegar atualizações de documentos caso tenha neste intervalo.
● O scan permite que desativemos o sorting do elastic e apenas retorne os proximos dados do scroll.
● Para usar basta fazer uma busca colocando o search_type como scan e passando o parâmetro scroll dizendo quanto tempo esse scroll pode ficar aberto.
34
![Page 35: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/35.jpg)
PREFIX vs REGEX vs NGRAM
35
![Page 36: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/36.jpg)
Prefix Query
● Prefix queries rodam no term level ou seja não passam por analyzers.● Por padrão não geram relevância, é mais como um filtro do que uma query.
36
![Page 37: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/37.jpg)
Prefix query
PREFIX = EX;UMA FRASE DE EXEMPLO
Retorna o ID
37
![Page 38: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/38.jpg)
WILDCARD e REGEXP query
● Funcionam da mesma maneira que a Prefix Query● Aceitam expressões regulares como * [0-9]
38
![Page 39: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/39.jpg)
NGRAMS
● Buscas baseadas em digitação são incrementais○ exemplo: waldemar = w wa wal wald walde waldem waldema
waldemar● Só podem ser buscadas coisas que estão indexadas
○ Por que não indexar pedaços de terms?
39
![Page 40: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/40.jpg)
Exemplo de Edge Ngram
waldemar
40
wa
waldwaldem
waldemar
![Page 41: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/41.jpg)
E na produção?Artigo publicado no iMasters sobre boas práticas
41
![Page 42: Elasticsearch de dentro para fora](https://reader034.vdocuments.site/reader034/viewer/2022052514/58e94b3b1a28ab262c8b52f5/html5/thumbnails/42.jpg)
E ERAS ISSO!PERGUNTAS?
HTTP://WALDE.CO/42