Transcript
Page 1: Elasticsearch de dentro para fora

Elasticsearch de dentro para fora

Page 2: Elasticsearch de dentro para fora

OPA!Sou o Waldemar NetoEngenheiro de software

http://walde.co

2

Page 3: Elasticsearch de dentro para fora

3

Page 4: Elasticsearch de dentro para fora

‘’“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

Í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

Overview do ecossistema6

CLUSTER

NODE

SHARD REPLICA

Page 7: Elasticsearch de dentro para fora

Lucene7

Page 8: Elasticsearch de dentro para fora

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

o campo _source

O campo source é compactado e jogado no disco.

9

Page 10: Elasticsearch de dentro para fora

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

Filter - Term level Query

11

Page 12: Elasticsearch de dentro para fora

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

Quando usar filtros?

● Termos booleanos● Termos que não mudam● Termos que determinam regras● Ranges

13

Page 14: Elasticsearch de dentro para fora

Caching

14

Page 15: Elasticsearch de dentro para fora

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

TIPOS DE CACHE

● Shard-Level cache >= 1.4● Filter Cache

16

Page 17: Elasticsearch de dentro para fora

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

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

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

Query

20

Page 21: Elasticsearch de dentro para fora

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

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

Query vs Filter

23

Page 24: Elasticsearch de dentro para fora

Exemplo de Query e Filter juntos24

Page 25: Elasticsearch de dentro para fora

Ordem de prioridade25

Page 26: Elasticsearch de dentro para fora

score26

Page 27: Elasticsearch de dentro para fora

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

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

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

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

Analyzers tem impacto?

31

Page 32: Elasticsearch de dentro para fora

Pagination é bom?

32

Page 33: Elasticsearch de dentro para fora

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

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

PREFIX vs REGEX vs NGRAM

35

Page 36: Elasticsearch de dentro para fora

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

Prefix query

PREFIX = EX;UMA FRASE DE EXEMPLO

Retorna o ID

37

Page 38: Elasticsearch de dentro para fora

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

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

Exemplo de Edge Ngram

waldemar

40

wa

waldwaldem

waldemar

Page 41: Elasticsearch de dentro para fora

E na produção?Artigo publicado no iMasters sobre boas práticas

41

Page 42: Elasticsearch de dentro para fora

E ERAS ISSO!PERGUNTAS?

HTTP://WALDE.CO/42