SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Lucene
Od wyszukiwarki po analizę danych
Zbyszko Papierski
zbyszko.papierski@gmail.com
@ZPapierski @AllegroTechBlog
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
Odwrócony indeks + analiza danych tekstowych
wydajne algorytmy poszukiwania
analiza korpusu dokumentów (Faceting, Agregacje
ELS)
Dlaczego Lucene?
Indeks odwrócony (i płaski)
Podzielony na niemutowalne segmenty
wyszukiwanie może być realizowane w
każdym segmencie oddzielnie
Indeks Lucene
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
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
• Proces analizy taki sam jak przy
indeksowaniu
• …lub niekoniecznie
Lucene - zapytania
Analiza
CharFilters
Tokenizer
TokenFilters
Lucene - indeksowanie
CharFiltern
→ Tokenizer → TokenFilterm
=
Analizator
Lucene - indeksowanie
Lucene - CharFilter
Modyfikuje analizowany tekst
Zmienia offset tokenów względem oryginalnego tekstu
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
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
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
Lucene - Tokenizer
Dzieli analizowany tekst na tokeny
Zapisuje (bądź nie) dodatkowe informacje
Lucene - Tokenizer
Whitespace Tokenizer
● Podział na tokeny po białych spacjach
here comes/came the spider-man
[here,comes/came,the,spider-man]
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]
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]
Lucene - TokenFilter
Wpływa na wynikowe tokeny
Pozwala na modyfikację, usuwanie i dodawanie nowych
Lucene - TokenFilter
Lowercase Token Filter
● Zamiana wszystkich znaków na małe
● Analogiczny - UppercaseTokenFilter
[Rewelacyjny, ten,TokenFilter]
[rewelacyjny, ten,tokenfilter]
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.
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
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
● CharFilter
○ HTML Strip
○ Mapping
○ Pattern Replace
● Tokenizer
○ NGram
○ Path Hierachy
○ i więcej...
Lucene - indeksowanie
● TokenFilter
○ Synonym
○ Stemmer
○ Shingle
○ Ascii Folding
○ Phonetic Token Filter
○ Stop Token Filter
○ i (dużo) więcej...
Lucene - indeksowanie
• Relevancy scoring - sortowanie po
trafności
• TF-IDF
• inne, rzadziej używane
Lucene - zapytania
• Najdłużej używany
• Spora społeczność
• praca na cloudzie dorzucona w
późniejszych wersjach
Narzędzia - Solr
• 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
• 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
Typy agregacji:
• metric
• bucket
• pipeline - dopiero od 2.0.0Beta1
Elasticsearch -Agregacja
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
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”
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
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
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
Narzędzia - kopf
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)
Narzędzia - kibana
https://github.com/maeph/JUG-Lucene - examples
http://lucene.apache.org/solr/ - Solr
http://lucene.apache.org/ - Lucene
http://www.elasticsearch.org/ - Elasticsearch
Links
Q/A

Contenu connexe

En vedette

PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PROIDEA
 
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...PROIDEA
 
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian GrodzickiPROIDEA
 
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...PROIDEA
 
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes PROIDEA
 
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...PROIDEA
 
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...PROIDEA
 
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek Piotrowski
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek PiotrowskiJDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek Piotrowski
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek PiotrowskiPROIDEA
 
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...PROIDEA
 
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PROIDEA
 
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoDevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoPROIDEA
 
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiJDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiPROIDEA
 
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...PROIDEA
 
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...PROIDEA
 
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...PROIDEA
 
PLNOG15: Exascale future of today - Rob Bird
PLNOG15: Exascale future of today - Rob BirdPLNOG15: Exascale future of today - Rob Bird
PLNOG15: Exascale future of today - Rob BirdPROIDEA
 
Driver I: Food Security
Driver I: Food Security Driver I: Food Security
Driver I: Food Security SIANI
 
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...PROIDEA
 
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...PROIDEA
 
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...PROIDEA
 

En vedette (20)

PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
 
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
 
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
 
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
 
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes
CONFidence2015: Who put the backdoor in my modem? - Ewerson (Crash) Guimaraes
 
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...
JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Ma...
 
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
 
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek Piotrowski
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek PiotrowskiJDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek Piotrowski
JDD2015: ClassIndex - szybka alternatywa dla skanowania klas - Sławek Piotrowski
 
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
 
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
 
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoDevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
 
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiJDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
 
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
JDD2015: Don’t Panic – Hitchhiker’s guide to the JVM monitoring - Wojciech Oc...
 
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...
4Developers 2015: CQRS - Prosta architektura dla nieprostego systemu! - Mateu...
 
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...
PLNOG 13: Krzysztof Konkowski: Cisco Access Architectures: GPON, Ethernet, Ac...
 
PLNOG15: Exascale future of today - Rob Bird
PLNOG15: Exascale future of today - Rob BirdPLNOG15: Exascale future of today - Rob Bird
PLNOG15: Exascale future of today - Rob Bird
 
Driver I: Food Security
Driver I: Food Security Driver I: Food Security
Driver I: Food Security
 
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
 
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
CONFidence 2015: APT x 3 - trzy firmy, trzy wektory ataków, trzy do zera - wy...
 
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...
4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...4Developers 2015: Dlaczego wybraliśmy Godot Engine dla naszych przyszłych gie...
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
  • 9. CharFiltern → Tokenizer → TokenFilterm = Analizator Lucene - indeksowanie
  • 10. Lucene - CharFilter Modyfikuje analizowany tekst Zmienia offset tokenów względem oryginalnego tekstu
  • 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
  • 14. Lucene - Tokenizer Dzieli analizowany tekst na tokeny Zapisuje (bądź nie) dodatkowe informacje
  • 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]
  • 18. Lucene - TokenFilter Wpływa na wynikowe tokeny Pozwala na modyfikację, usuwanie i dodawanie nowych
  • 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
  • 23. ● CharFilter ○ HTML Strip ○ Mapping ○ Pattern Replace ● Tokenizer ○ NGram ○ Path Hierachy ○ i więcej... Lucene - indeksowanie
  • 24. ● TokenFilter ○ Synonym ○ Stemmer ○ Shingle ○ Ascii Folding ○ Phonetic Token Filter ○ Stop Token Filter ○ i (dużo) więcej... Lucene - indeksowanie
  • 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
  • 29. Typy agregacji: • metric • bucket • pipeline - dopiero od 2.0.0Beta1 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)
  • 38. https://github.com/maeph/JUG-Lucene - examples http://lucene.apache.org/solr/ - Solr http://lucene.apache.org/ - Lucene http://www.elasticsearch.org/ - Elasticsearch Links
  • 39. Q/A