LUCENE - OD WYSZUKIWARKI PO ANALIZĘ DANYCH
Lucene jest biblioteką wspomagającą wyszukiwanie pełnotekstowe. Od dłuższego czasu ta biblioteka, wraz z rozwiązaniami o nią opartymi - Solr, Elasticsearch - służą nie tylko do szukania. Wśród wielu funkcji na dość znaczącą wyrosła analiza danych, o której chciałbym trochę opowiedzieć. Podczas prelekci opiszę, skąd pochodzi siła Lucene w procesie analizy - czyli jak działąją analizatory. Następnie wskoczymy w przykłady, które pozwolą na łatwe wejście w prostą analizę danych, wykorzystując Elasticsearch.
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...
JDD2015: Lucene - od wyszukiwarki po analizę danych - Zbyszko Papierski
1. Lucene
Od wyszukiwarki po analizę danych
Zbyszko Papierski
zbyszko.papierski@gmail.com
@ZPapierski @AllegroTechBlog
2. Jak działa indeks Lucene
Analiza danych za pomocą Lucene
Analiza danych za pomocą agregacji Elasticsearch
Co będzie
Lucene + Elasticsearch jako narzędzie do łatwej analizy danych
3. Odwrócony indeks + analiza danych tekstowych
wydajne algorytmy poszukiwania
analiza korpusu dokumentów (Faceting, Agregacje
ELS)
Dlaczego Lucene?
4. Indeks odwrócony (i płaski)
Podzielony na niemutowalne segmenty
wyszukiwanie może być realizowane w
każdym segmencie oddzielnie
Indeks Lucene
5. Lucene - Token
{
"token": "here",
"start_offset": 0,
"end_offset": 4,
"type": "word",
...
}
token wartość tekstowa tokenu
start_offset początek oryginalnej pozycji tokenu
end_offset koniec oryginalnej pozycji tokenu
type wykryty za pomocą tokenizera
typ tokena, np word czy alfanum
Obiekt tokenu posiada również inne pola, pozwala
też na dodawanie własnych metadanych
6. Przykład
doc1:Wiadra były koloru czerwono-niebieskiego
Wiadra były koloru czerwono niebieskiego
wiadro byl kolor czerwony niebieski
{wiadro:1,byl:1,kolor:1,czerwony:1,niebieski:1} → doc1
Lucene - indeksowanie
7. • Proces analizy taki sam jak przy
indeksowaniu
• …lub niekoniecznie
Lucene - zapytania
11. Lucene - CharFilter
HTML Strip Char Filter
Zastosowanie:
● Usuwanie tagów HTML z danego tekstu
<a href=”http://ex.pl”>this</a> is a test
this is a test
12. Lucene - CharFilter
Mapping Char Filter
● Pozwala na zamianę fragmentów tekstu na inny
według mapowań
Mapping = th → z, k → c
release the kraken
release ze cracen
13. Lucene - CharFilter
Pattern Replace Char Filter
● Pozwala na zastępowanie fragmentów tekstu za
pomocą wyrażeń regularnych
● Wykorzystuje mechanizmy i składnie pakietu Java
regex
● Pozwala na referencję grup oryginalnego tekstu i
odwołania wsteczne
pattern = (.)1
replacement = $1
thrilled teenager
thriled tenager
15. Lucene - Tokenizer
Whitespace Tokenizer
● Podział na tokeny po białych spacjach
here comes/came the spider-man
[here,comes/came,the,spider-man]
16. Lucene - Tokenizer
Standard Tokenizer
● Podział na tokeny podług zasad łamania słów
opisanych w Unicode® Standard Annex #29
● dodaje informacje o tokenie
● Tworząc własny tokenizer, zaleca się sklonować
ten
Przykład:
here comes/came the spider-man
[here,comes,came,the,spider,man]
17. Lucene - Tokenizer
Keyword Tokenizer
● Wejściowy tekst jest tokenizowany jako pojedynczy
token
Przykład:
here comes/came the spider-man
[here comes/came the spider-man]
19. Lucene - TokenFilter
Lowercase Token Filter
● Zamiana wszystkich znaków na małe
● Analogiczny - UppercaseTokenFilter
[Rewelacyjny, ten,TokenFilter]
[rewelacyjny, ten,tokenfilter]
20. Lucene - TokenFilter
Synonym Token Filter
● Pozwala na podmianę danego tokenu na jego synonimy, zdefiniowane
podczas inicjacji filtru
● Flaga expand pozwala na dołożenie wszystkich synonimów danego
tokena do wynikowego strumieńa tokenów
[rewelacyjny, ten,tokenfilter]
[świetny,rewelacyjny,boski, ten,tokenfilter]
Uwaga: Expand warto stosować, jeśli optymalizujemy zapytania względem
zapisów.
Uwaga 2: Żeby złapać wielowyrazowe synonimy, można użyć Shingle TokenFilter,
lub wprowadzić Expand na etapie zapytania.
21. Lucene - TokenFilter
Shingle Token Filter
● Dokłada tokeny będące połączeniem innych, następujących po sobie
tokenów
● opcje min_shingle_size i max_shingle_size ilości tokenów używanych
do kombinacji. Domyślnie obie to 2
[to, jest,test]
[to,to jest,jest, jest test,test]
Uwaga: Filtr jest w stanie znacząco powiększyć wejściowy
22. Lucene - TokenFilter
Morfologik Token Filter
● Podmienia słowa w tekście (typ word) na formy wspólne w języku
polskim - niekoniecznie są to formy podstawowe czy tematu
● Przykład filtra realizującego funkcjonalność stemmingu
● Nie jest to jedyny filtr realizujący stemming dla języka polskiego
[urodzić][urodzony][urodzona][urodzeni]
[urodzić] [urodzić,urodzony] [urodzić,urodzić] [urodzić, urodzony]
Przykład za: http://solr.pl/2012/04/02/solr-4-0-i-mozliwosci-analizy-jezyka-polskiego/
Uwaga: Expand warto stosować, jeśli optymalizujemy zapytania względem
zapisów
25. • Relevancy scoring - sortowanie po
trafności
• TF-IDF
• inne, rzadziej używane
Lucene - zapytania
26. • Najdłużej używany
• Spora społeczność
• praca na cloudzie dorzucona w
późniejszych wersjach
Narzędzia - Solr
27. • Potężne możliwości out-of-the-box
• ale swobodnie konfigurowalny
• Znacznie lepsze możliwości analityczne
niż Solr
• Struktura dokumentu odwzorowana w
json (dokumenty Lucene są płaskie)
Narzędzia - Elasticsearch
28. • Pozwala na budowanie online
informacji na temat agregatów danych
• Wyszła z modułu facet bibliotek Lucene
• Dużo dostępnych agregacji
• Agregacją są zagnieżdzalne!
Elasticsearch -Agregacja
30. Analiza danych
Konfiguracja:
• Zaindeksowane zapytania
• Agregacja date-histogram - z opcją interval 1M
• podagregacja significant-terms
Uwaga: Agregacja significant-terms po polach typu
free text jest pracochłonna!
Przypadek użycia: Odnalezienie trendów w
wyszukiwaniach użytkowników w poszczególnych
miesiącach
31. Analiza danych
Konfiguracja:
• Zaindeksowane artykuły
• Agregacja significant-terms
Uwaga: Agregacja significant-terms po polach typu
free text jest pracochłonna!
Przypadek użycia: Zaprezentowanie popularnych pojęc
występujących w artykułach w kontekście wyszukiwania
- “chmura tagów”
32. Analiza danych
Konfiguracja:
• Zaindeksowane aktywności razem z lokacją
• Agregacja geohash_grid
Uwaga: Agregacja geohash_grid działa na
konfigurowalnej precyzji obszarów - małe obszary
powodują duży narzut na RAM. Rozwiązanie -
ograniczenie obszaru wejściowego za pomocą filtru
geo_bounding_box
Przypadek użycia: Obszary geograficzne największej
aktywności
33. Analiza danych
Konfiguracja:
• Zaindeksowane aktywności razem z danymi
użytkownika i czasem wystąpienia
• Agregacja range o polu z wiekiem
• podagregacja date_histogram z wybranym
interwałem i ustawieniem order na “_count”:”desc”
Przypadek użycia: Najczęstsze miesiące aktywności na
serwisie w podgrupach wiekowych
34. Analiza danych
Konfiguracja:
• zaindeksowanie danych ofert razem z
wystawiającym
• agregacja terms po płci
• podagregacja terms po typie ofert
Przypadek użycia: najczęściej występujące typy ofert w
zależności od płci
36. Narzędzia - Logstash
● “Rura” zbierająca dane z
różnych źródeł
● Ułatwia przekształcanie
danych do wspólnego
modelu
● Bardzo dobra współpraca z
Elasticsearch (pakiet ELK)