Solr 3.1: FastVectorHighlighting

Jedną z wielu nowych funkcjonalności jakie przyniosła wersja 3.1 biblioteki Lucene i serwera wyszukiwania Solr jest FastVectorHighlighting, czyli nic innego jak usprawnione funkcjonalności odpowiedzialne za highlighting. Ze względu na to, że obecny dotychczas w Solr highlighting nie dość, że nie działał zbyt szybko, to mówiąc wprost potrafił zabić Solr przy dużej ilości danych, bądź bardzo długich polach tekstowych. Stwierdziłem, że warto przetestować wydajność nowej funkcjonalności.

Kilka słów na początek

Na początek kilka informacji o możliwościach nowego hightlightra w Lucene:

  • wspiera pola oparte o N-gram
  • wymusza wykorzystanie Java 5 lub wyższej
  • bierze pod uwagę podbicia w celu nadawania ważności fragmentom tekstu
  • jest bardzo szybki dla dużych dokumentów

Warto wspomnieć, iż obecny highlighter został oznaczony jako Deprecated zgodnie z ticketem SOLR-1696.

Jak został wykonany test ?

Do testów wykorzystałem indeks zawierający około 1.2 miliona dokumentów (zaindeksowane dane polskiej wikipedii – tylko najnowsze zmiany). Dla każdego z poniższych wyszukiwań wykorzystywałem duże pole testowe do podświetlenia, raz ze starym (hl.useFastVectorHighlighter=false), raz z nowym (hl.useFastVectorHighlighter=true) highlighterem. Testy wykonywane były na wyłączonym cache`u Solr. Przedstawiony w tabelce czas odpowiedzi, to średni czas z 10 kolejno zadanych zapytań z wyłączeniem czasu największego i najmniejszego. Poniżej wyniki tego prostego testu:

ZapytanieCzas odpowiedzi starego HighlighteraCzas odpowiedzi FastVectorHighlighterIlość wyników
q=jan3ms2ms47690
q=julian+tuwim20ms13ms399
q=poczta+polska18ms13ms4507
q=wojna+armia+krajowa10ms8ms1714

Pomimo tego, iż test jest prosty pokazuje pewną prawidłowość – FastVectorHighlighter jest szybszy od dotychczasowego highlightera.

Co do samej jakości podświetleń nie udało mi się zauważyć większych różnic, aczkolwiek specyfika danych nie sprzyja takim obserwacjom.

O czym należy pamiętać ?

Należy pamiętać, że FastVectorHighlighter wymaga, aby pole na którym będzie działać, było odpowiednio zdefiniowane. Konieczne jest ustawienie atrybutów pola na następujące: termVectors=”true” termPositions=”true” termOffsets=”true”. W przeciwnym wypadku dalej będzie wykorzystywany stary mechanizm.

Podsumowując

Warto pamiętać, że test przeprowadzony przeze mnie nie jest dokładnym testem wydajności, a jedynie sprawdzeniem nowego mechanizmu w warunkach mniej lub bardziej przypominających produkcyjne. Pozwala to jednak stwierdzić, iż możemy spodziewać się zwiększonej wydajności podczas korzystania z nowej wersji highlightingu.

This post is also available in: angielski

This entry was posted on poniedziałek, Czerwiec 13th, 2011 at 08:55 and is filed under Lucene, Solr. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.