際際滷

際際滷Share a Scribd company logo
Elasticsearch w
ekosystemie Allegro
Andrzej Wisowski, Pawe Bobruk
O nas:
zesp坦 zajmujcy si dostarczaniem zespoom
Elasticsearch jak usug w Grupie Allegro
infrastruktura
konsultacje
szkolenia wewntrzne
Agenda
Dlaczego elasticsearch
Teoria wyszukiwania informacji
Agregacje
Przypadki u甜ycia w Allegro
Infrastruktura klastr坦w ELS w Allegro
Nowoci w elasticsearch 2.0
Dlaczego
elasticsearch
allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Real-Time data & analytics
System Rozproszony
Wyszukiwanie penotekstowe
Restowe API
Dokumenty JSONowe
Teoria
wyszukiwania
informacji
Wyszukiwanie informacji
Wyszukiwanie informacji (information
retrivial) jest pozyskaniem istotnych dla
szukaja岬cego informacji (zazwyczaj
dokumentow) z ze zbioru danych
informatycznych (zazwyczaj
niestrukturalnych).
Odwr坦cony indeks
Dokument - element, na ktorym budujemy
system
(np. produkt w sklepie, strona internetowa)
Term - element indeksu, zazwyczaj
pojedyncze sowo zestaw termow tworzy
sownik indeksu
Wyszukiwanie penotekstowe
Term Doc_1 Doc_2 Doc_3
------------------------------------
brown | X | X |
dog | X | |
dogs | | X | X
fox | X | | X
foxes | | X |
in | | X |
jumped | X | | X
lazy | X | X |
leap | | X |
over | X | X | X
quick | X | X | X
summer | | X |
the | X | | X
------------------------------------
Odwr坦cony index
Doc_1: The quick brown fox jumped over the lazy dog
Doc_2: Quick brown foxes leap over lazy dogs in summer
Doc_3: The quick fox jumped over dogs
Analizatory
Analizatory
- Tokenizer
- whitespace - tokeny tylko po biaych znakach
- standard - tokeny po biaych znakach + znakach interpunkcji
- keyword - np. dla marek Hugo Boss
- regexp - wasna definicja
- Token Filter
- lowercase
- stopword
Wyszukiwanie penotekstowe
GET /my_index/_search
{
"query" : {
"match" : {
"body" : "brown"
}
}
}
Term Doc_1 Doc_2 Doc_3
------------------------------------
brown | X | X |
dog | X | | X
dogs | | X | X
fox | X | | X
foxes | | X |
in | | X |
jumped | X | | X
lazy | X | X |
leap | | X |
over | X | X | X
quick | X | X | X
summer | | X |
the | X | | X
------------------------------------
Odwr坦cony index
Agregacje
Term Doc_1 Doc_2 Doc_3
------------------------------------
brown | X | X |
dog | X | | X
dogs | | X | X
fox | X | | X
foxes | | X |
in | | X |
jumped | X | | X
lazy | X | X |
leap | | X |
over | X | X | X
quick | X | X | X
summer | | X |
the | X | | X
------------------------------------
Odwr坦cony index
GET /my_index/_search
{
"query" : {
"match" : {
"body" : "brown"
}
},
"aggs" : {
"popular_terms": {
"terms" : {
"field" : "body"
}
}
}
}
Field data
Doc Terms
-----------------------------------------------------------------
Doc_1 | brown, dog, fox, jumped, lazy, over, quick, the
Doc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summer
Doc_3 | dog, dogs, fox, jumped, over, quick, the
-----------------------------------------------------------------
doc values - field data na dysku
Field data
Doc Terms
-----------------------------------------------------------------
Doc_1 | brown, dog, fox, jumped, lazy, over, quick, the
Doc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summer
Doc_3 | dog, dogs, fox, jumped, over, quick, the
-----------------------------------------------------------------
GET /my_index/_search
{
"query" : {
"match" : {
"body" : "brown"
}
},
"aggs" : {
"popular_terms": {
"terms" : {
"field" : "body"
}
}
}
}
Term Doc_1 Doc_2 Doc_3
------------------------------------
brown | X | X |
dog | X | | X
dogs | | X | X
...
-----------------------------------
{
"hits": {
"total": 2,
...
},
"aggregations": {
"popular_terms": {
"buckets": [
{
"key": "brown",
"doc_count": 2
},
{
"key": "lazy",
"doc_count": 2
},
{
"key": "over",
"doc_count": 2
},
{
"key": "quick",
"doc_count": 2
},
{
"key": "dog",
"doc_count": 1
},
...
]
}}}
Inverted index
Agregacje
allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Metrics
min
max
sum
avg
value_count
sum_of_squares
std_deviation
variance
terms
agregacja po polu
Najczciej wyszukiwane sowa
{
"aggs": {
"mostCommonSearched": {
"terms": {
"field": "phrase"
}
}
}
}
{
"key": "samsung",
"doc_count": 3321830
},
{
"key": "galaxy",
"doc_count": 2664985
},
{
"key": "audi",
"doc_count": 2343937
},
{
"key": "nike",
"doc_count": 2234019
},
...
agregacje
zagbione
Najczciej wyszukiwane per
kategoria
{
"aggs": {
"category": {
"terms": {
"field": "category",
"size": 5
},
"aggs": {
"mostCommonSearched": {
"terms": {
"field": "phrase",
"size": 5
}
}
}
}
Main Page Motoryzacja Ksi甜ki i Komiksy Komputery Odzie甜, Obuwie,
Dodatki
samsung audi testy lenovo nike
nike bmw historia tablet adidas
galaxy mercedes matematyka office buty
buty opel nauczyciela microsoft air
audi honda ksiga gtx sukienka
stats
count, min, max, avg, sum
Statystyki cen per kategoria
{
"aggs": {
"category": {
"terms": {
"field":
"category",
"size": 10
},
"aggs": {
"stats": {
"stats": {
"field": "price"
}
}
}
}
}
{
"key": "Owietlenie/Lampy",
"stats": {
"count": 157452,
"min": 1,
"max": 66479,
"avg": 297.42634631508975,
"sum": 46830373.080003515
}
},
...
percentile
{
"key": "Owietlenie/Lampy",
"percentile": {
"values": {
"50.0": 162.65936064485723,
"75.0": 330.90439138409306,
"95.0": 980.0905118431161,
"99.0": 2147.587473335171
}
}
},
...
Ceny w percentylach per kategoria
{
"aggs": {
"category": {
"terms": {
"field":
"category.path",
"size": 10
},
"aggs": {
"percentile": {
"percentiles": {
"field": "price",
"percents": [
50,
75,
95,
99
]
date_histogram
statystyka wg daty
Nowe produkty Sprzedawcy
{
"aggs": {
"date": {
"date_histogram": {
"field": "createdAt",
"interval": "month"
}
}
}
}
{
"key":
April,
"doc_count": 13
},
{
"key":
May,
"doc_count": 40
},
{
"key":
June,
"doc_count": 28
script
Koniec aukcji wg dni tygodnia
{
"query": {
"aggs": {
"auctionsPerWeekDay": {
"terms": {
"script":
doc['endDate'].date.dayOfWeek().getAsText(
)",
}
}
}
}
Niedziela 3672219
Sobota 3144495
Poniedziaek 3090514
Pitek 2823472
roda 2729971
Czwartek 2724953
geo
allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Punkty odbioru w promieniu 1,5 km
{
"aggs": {
"byPlace": {
"geo_distance": {
"field": "location",
"origin": "52.2401,21.0421",
"ranges": [
{ "to": 700},
{"from": 700, "to":
1000},
{"from": 1000, "to": 1500}
],
"unit": "m"
}
}
}
}
{
"key": "*-700.0",
"from": 0,
"to": 700,
"doc_count": 1
},
{
"key": "700.0-1000.0",
"from": 700,
"to": 1000,
"doc_count": 6
} ,
{
"key": "1000.0-1500.0",
"from": 1000,
"to": 1500,
"doc_count": 12
}
pipeline v 2.0
allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Pipeline
statystyczne (min, max, avg, ...)
percentile
cumulative
moving
...
Moving
Elasticsearch w
Allegro
Rekomendacje
Rekomendacje
- indeksowane s oferty allegro zawierajce id meta
produktu oraz ranking (score) oznaczajcy jako oferty
{
name: iphone 6, super oferta
offerId: 23,
metaProductId: p12,
score: 0,324
}
- system rekomendacji wybiera meta produkty kt坦re maj
by zarekomendowane u甜ytkownikowi
Rekomendacje
{
"aggregations": {
"by_meta_product_id": {
"buckets": [
{ "key": "p12",
"top_n_items": {
"hits": {
"total": 15,
"max_score": null,
"hits": [
{ { "name": "iphone 6s" },
"sort": [ 0.1485 ]
},
{ { "name": "iphone 6s nowo", },
"sort": [ 0.1348 ]
},
...
]
}}}]}}}
Problemy- optimize
- w Lucene zmiana dokumentu to usunicie i dodanie
nowego
- przy czstych zmianach indeksu, ronie ilo
skasowanych dokument坦w, przy przekroczeniu pewnego
progu - u nas 20% ma to wpyw na czasy odpowiedzi
- dlatego raz na dob wymuszamy optimize indexu
Wydajno
- wielko indeksu: 25 mln dokument坦w
- odczyty > 3000 rps
- czasy odpowiedzi : < 500ms (p99)
Skalujemy odczyty przez wiksz liczb replik.
http://hermes.allegro.tech/
https://github.com/allegro/hermes
Hermes
wykorzystanie do audyt坦w event坦w, zapisywane s
wysane i opublikowane eventy
wydajne zapisy ponad 4000 rps
indeksy timeseries (per dzie), atow kasowania
okoo 1,8 mld dokument坦w
zapisy bulkami
DWH
- KIBANA - analityczne - biznes potrafi u甜ywa
- marketing / reklama
- 4 mld dokument坦w
- 2000 indeks坦w
- indeksy timeseries z u甜yciem alias坦w
Bilingi
Billingi serwis坦w allegro
okoo 400 mln dokument坦w
indeksowa 100 rps
u甜ycie timeseries i alias坦w
routing po u甜ytkowniku
Punkty odbioru - GEO
wyszukiwanie geolokalizacyjne
Setup
klastr坦w
Setup cloudowy
prywatny cloud oparty na openstacku
ansible do automatyzacji stawiania klastr坦w (atwe
rozszerzanie)
backupy na hdfsa - rozszerzylimy o autoryzacj kerberos
monitoring oparty na graphite, cabot i pagerduty
Narzdzie do reindeksacji
https://github.com/allegro/elasticsearch-reindex-tool
Nowoci w
elasticsearch 2.0
Elasticsearch 2.0
Agregacje Pipeline
uproszczone query API - (filtry zmergowane w query)
konfigurowalne kompresowanie (LZ4, DEFLATE)
doc-values - domylne
Shield na poziomie p坦l i dokument坦w (patny)
Marvel opensoursed
Sense opensourced
Pytania

More Related Content

allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Editor's Notes

  1. dostarczanie infrastrukury konsultacje szkolenia
  2. ten obrazek do zmiany na inny
  3. czy screenshot z sensa, curl np. jak w slajdzie analyze api: !jeden slajd. (Nie ma narzuconej schemy)! Format Json
  4. X
  5. X
  6. Elasitcsearch skaluje zapis przez zwikszenie iloci shard坦w.
  7. zmieni font
  8. nody hot i cold; przegldarkowy klient - sense!