allegro.tech Data Science Meetup #2:
Elasticsearch w ekosystemie Allegro
Andrzej Wisłowski, Paweł Bobruk
Wystąpienie z meetupu:
http://www.meetup.com/allegrotech/events/226484033
13. Wyszukiwanie informacji
Wyszukiwanie informacji (information
retrivial) jest pozyskaniem istotnych dla
szukającego informacji (zazwyczaj
dokumentów) z ze zbioru danych
informatycznych (zazwyczaj
niestrukturalnych).
14. Odwrócony indeks
Dokument - element, na którym budujemy
system
(np. produkt w sklepie, strona internetowa)
Term - element indeksu, zazwyczaj
pojedyncze słowo zestaw termów tworzy
słownik indeksu
15. Wyszukiwanie pełnotekstowe
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
17. Analizatory
- Tokenizer
- whitespace - tokeny tylko po białych znakach
- standard - tokeny po białych znakach + znakach interpunkcji
- keyword - np. dla marek “Hugo Boss”
- regexp - własna definicja
- Token Filter
- lowercase
- stopword
18. Wyszukiwanie pełnotekstowe
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
19. 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"
}
}
}
}
29. 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 księga gtx sukienka
47. Rekomendacje
- indeksowane są oferty allegro zawierające id meta
produktu oraz ranking (score) oznaczający 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
49. Problemy- optimize
- w Lucene zmiana dokumentu to usunięcie i dodanie
nowego
- przy częstych zmianach indeksu, rośnie ilość
skasowanych dokumentów, przy przekroczeniu pewnego
progu - u nas 20% ma to wpływ na czasy odpowiedzi
- dlatego raz na dobę wymuszamy optimize indexu
50. Wydajność
- wielkość indeksu: 25 mln dokumentów
- odczyty > 3000 rps
- czasy odpowiedzi : < 500ms (p99)
Skalujemy odczyty przez większą liczbę replik.
57. Setup cloudowy
prywatny cloud oparty na openstacku
ansible do automatyzacji stawiania klastrów (łatwe
rozszerzanie)
backupy na hdfsa - rozszerzyliśmy o autoryzację kerberos
monitoring oparty na graphite, cabot i pagerduty