3camp - lucene pod presją?

14
Lucene pod presją Jak się sprawdza w dużym portalu silnik wyszukiwawczy oparty o bibliotekę Lucene? Dominika Puzio Patryk Makuch 30 marca 2011

Upload: wirtualna-polska

Post on 18-Dec-2014

557 views

Category:

Technology


2 download

DESCRIPTION

Jak się sprawdza w dużym portalu silnik wyszukiwawczy oparty o bibliotekę Lucene?

TRANSCRIPT

Page 1: 3camp - Lucene pod presją?

Lucene pod presją

Jak się sprawdza w dużym portalu silnik wyszukiwawczy oparty

o bibliotekę Lucene?

Dominika PuzioPatryk Makuch

30 marca 2011

Page 2: 3camp - Lucene pod presją?

Lucene co to jest?

2

Page 3: 3camp - Lucene pod presją?

Dlaczego Lucene?

3

Potrzebowaliśmy nowego silnika

Z doświadczeń z poprzednimi silnikami wynikało, że:

to musi być open source

powinien być skrojony na miarę

powinien być rozszerzalny

powinien być przetestowany przez innych

powinien się rozwijać

potrzebujemy porządnej dokumentacji i źródeł wiedzy

Lucene wygrywała wszystkie rankingi silników open source odpowiednich do zastosowań przemysłowych

Deweloperzy piszący serwisy sami zaczęli używać Lucene lokalnie

w serwisach

Page 4: 3camp - Lucene pod presją?

Dlaczego nie SOLR? lub inny gotowy serwer...

4

Wtedy SOLR się nie nadawał

Potrzebowaliśmy czegoś skrojonego na miarę

Dziś warto zwrócić uwagę na gotowe rozwiązania:

SOLR – gotowy serwer, communities Lucene i SOLRa mają się połączyć

Katta – gotowy serwer, do bardzo dużych indeksów, ukierunkowany na klastrowanie

Nutch – gotowa wyszukiwarka www ( Lucene + SOLR + crawler )

Tika – adapter do różnych formatów dokumentów

Carrot – czyta indeksy Lucene i wykonuje klasteryzację danych

Page 5: 3camp - Lucene pod presją?

Architektura rozwiązania

5

Page 6: 3camp - Lucene pod presją?

Architektura rozwiązania co trzeba było zapewnić?

6

klastrowanie

load-balancing zapytań

możliwość regeneracji indeksu (automatycznie albo „z ręki”)

100% dostępność wyszukiwania podczas regeneracji indeksu

konfiguracja indeksu

administracja serwerem

monitoring

Page 7: 3camp - Lucene pod presją?

Serwer w liczbach

7

Liczba zapytań: kilkanaście mln na dobę

Czasy odpowiedzi:

dla standardowych artykułów (dużo tekstu) – kilka ms

niestandardowe:docelu.pl (geosearch) - ~40 msogloszenia.wp.pl (dużo kryteriów) - ~50 mstanio.pl (kategoryzacja) - ~15 ms

Wielkości indeksów:

liczba dokumentów:najmniejsze – kilka tysięcynajwiększe – kilka mlnrekordzista - ~30mln

Page 8: 3camp - Lucene pod presją?

Serwer w liczbach c.d.

8

Wielkości indeksów c.d.:

wielkość indeksu na dysku:od kilku kB do ~30GBśrednio kilkaset MB - kilka GB

Wydajność indeksowania:

budowanie z bazy danych – do ~3500 dok/s

update indeksu – do kilkuset dok/s

Sprzęt:

klastry po dwie maszyny serwerowe

Page 9: 3camp - Lucene pod presją?

Jak się sprawdza Lucene? błędy w Lucene

9

Corrupted index – zdarzało się uszkodzenie metadanych indeksu FIXED

Problem z commitem zmian FIXED

Sortowanie ciągów ze spacjami przy włączonej obsłudze znaków diakrytycznych – na lucene-java-users jest opis obejścia problemu

Gwiazdki FIXED

Na grupie lucene-java-users odpowiedź na zgłoszony problem pojawia się w ciągu kilku godzin

Page 10: 3camp - Lucene pod presją?

Jak się sprawdza Lucene? błędy w Lucene

10

Caused by: java.lang.OutOfMemoryError: OutOfMemoryError likely caused by the Sun VM Bug described in https://issues.apache.org/jira/browse/LUCENE-1566; try calling FSDirectory.setReadChunkSize with a a value smaller than the current chunk size (104857600) at org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.readInternal(NIOFSDirectory.java:179) at org.apache.lucene.store.BufferedIndexInput.readBytes(BufferedIndexInput.java:139) at org.apache.lucene.index.SegmentReader$Norm.bytes(SegmentReader.java:472) at org.apache.lucene.index.SegmentReader.getNorms(SegmentReader.java:1059) at org.apache.lucene.index.SegmentReader.norms(SegmentReader.java:1066) at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:79) at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:306) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:210) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:170) at org.apache.lucene.search.Searcher.search(Searcher.java:98)

Page 11: 3camp - Lucene pod presją?

Jak się sprawdza Lucene? wydajność

11

O wydajność trzeba zadbać...

Page 12: 3camp - Lucene pod presją?

Jak się sprawdza Lucene? dostosowanie

12

Kategoryzacja – w Lucene nie ma

Analizatory – dopisujemy nowe w miarę zapotrzebowania

Geosearch (contrib) – poprawka wydajnościowa

Page 13: 3camp - Lucene pod presją?

Zasoby wiedzy

13

Lucene Wiki

http://wiki.apache.org/lucene-java/FrontPage?action=show&redirect=FrontPageEN

Luke http://code.google.com/p/luke/

Java User List [email protected]

M. McCandless, E. Hatcher, O. Gospodnetić „Lucene in Action, Second Edition”

Lucid Imaginationhttp://www.lucidimagination.com/

Page 14: 3camp - Lucene pod presją?

14

Dziękujemy za uwagę