Mediovski Technology

Xapian vs Lucene

Data: 1 Grudzień 2009 18:51 Autor: Tomek | Kategoria: Bez kategorii,PHP,Zend Framework

Wyszukiwarka jest jedną z najczęściej spotykanych części aplikacji internetowych. Każdy developer przed rozpoczęciem tworzenia serwisu powinien dokładnie się zastanowić nad wyborem odpowiedniego silnika wyszukiwania, który będzie zaimplementowany w jego serwisie.

Przed wyborem silnika wyszukiwania należy zadać sobie następujące pytania:

  1. Jaka będzie skala serwisu?
  2. Jakimi technologiami dysponujemy?

W tym artykule zostanie przedstawione zestawienie (porównanie) popularnych silników wyszukiwania pełnotekstowego, które można zaimplementować w projektach PHP: Xapian, Jave Lucene oraz pseudo silnik Zend Search Lucene nie zintegrowany z Java Lucene.

Na wstępie przedstawię wspólne cech tych silników:

  • Możliwość zastosowanie operatorów boolowskie w szukanych frazach (AND, OR, NOT, !, &&, ||)
  • Podświetlanie wyników wyszukania (Highlighting)
  • Sortowanie wyników
  • Mozliwość zastosowanie wildcard w wyszukiwaniu (medio?ski)
  • Wszystkie opisywane silniki obsługują Unicode, co więcej dane w  indeksach zapisywane są w kodowaniu utf-8
  • Wieloplatformowość

W tym miejscu kończą się podobieństwa a zaczynają różnice. Można zauważyć że skala i waga podobieństw jest bardzo mała.

Pierwszym silnikiem jaki opisze bardziej szczegółowo jest Xapian:

  • Jest to silnik napisany w C++, co sprawia iż jest on bardzo szybki podczas wyszukiwania. Może być on zastosowany w projektach napisanych w różnych technologiach: PHP, Perl, Java, Ruby, Python, co sprawie że developer nie jest zmuszony do wyboru technologi dedykowanej dla tego silnika.
  • Dużą zaletą xapiana jest sposób instalacji silnika, w projektach PHP xapian jest instalowany jako dodatek (extension) do php. Użytkownicy systemów Linux mogą go pobrać z listy pakietów, natomiast użytkownicy innych systemów muszą pobrać aktualną wersję ze strony http://xapian.org/download.
  • Kolejnym argumentem jaki przemawia za xapianem jest brak ograniczenia dla wielkości indeksu niezależnie od systemu na jakim został on zaimplementowany.
  • Posiada on także moduł “słowotwórstwa”, który wykrywa różne odmiany wyrazów na podstawie zdefiniowanych reguł językowych, jednak ma on zaimplementowane jedynie 12 języków, wśród których niestety nie ma języka polskiego :(
  • Xapian jest w pełni skalowalny co bardzo ułatwia rozwój dużych serwisów.
  • Niestety xapian posiada także wady. Jedną z nich jest długość indeksowania, która wypada dość “mizernie” w porównaniu z Lucene. Jednak nadrabia to podczas wyszukiwania.
  • Xapian jako silnik wyszukiwania jest w pełni “bezpieczny” oznacza to iż ma zaimplementowaną jednoczesną obsługę wyszukiwania i aktualizacji, która nie powoduje “rozsypania” się indeksów.
  • Większość silników wyszukiwania ma dość sprawnie radzi sobie z indeksowaniem plików. Dla xapiana została stworzona dedykowana aplikacja “Omega”, która spokojnie radzi sobie z indeksowaniem takich plików jak: PHP, HTML, PDF, OpenOffice, Microsoft Word/Excel/Powerpoint/Works itp.

Kolejnym silnikiem wyszukiwania jaki opiszę jest Java Lucene:

  • Lucene jest silnikiem wyszukiwania napisanym w Javie, co powoduje że serwer jest bardzo wydajny. Jednak tu napotykamy się na pierwszy problem, gdyż to że Lucene jest napisana całkowicie w javie nie jest do końca zaletą, gdyż do jej działania potrzeba serwera serwletów. (Tu pojawia się myśl i czy warto zaprzęgać serwery serwletów i należy się zastanowić czy nasz serwis tego wymaga).
  • Najważniejszą zaletą lucene jest jej skalowalność, wynika to z technologii, w której jest napisana.
  • Tak jak xapian silnik lucene może być wykorzystywany przez większość popularnych języków programowania.
  • Jedną z wad lucene jest ograniczenie wielkości indeksu do 2gb dla systemów 32-bit, taka ilość może bardzo szybko się skończyć przy większych serwisach.
  • Tak jak xapian lucene jest w pełni “bezpieczny” tzn ma zaimplementowaną funkcjonalność jednoczesnego wyszukiwania i aktualizowania indeksów.
  • Silnik lucene potrafi także zineksować zewnętrzne pliki takie jak: HTML, Word 2007, Excel 2007, PowerPoint 2007.

Ostatnim “silnikiem” wyszukiwania jest Zend Search Lucene:

Nazwa tego “pseudo” silnika wyszukiwania jest dość mylna, gdyż gdy nie połączymy Zend_Search_Lucene z Java Lucene wyszukiwanie za pomocą tego modułu nie jest zbliżone do pełnej funkcjonalności Java Lucene.

Dodatek ten ma zaimplementowaną podobną funkcjonalność jak większość silników wyszukiwania lecz nie wykorzystuje on żadnego “szybszego” silnika. Co sprawia że można go zastosować wyłącznie przy bardzo małych projektach typu “Strona wizytówka”.

O jakiejkolwiek skalowalności w tym przypadku możemy zapomnieć.

Podsumowując wybór silnika wyszukiwania nie należy do prostych rzeczy. Analizując wyżej wymienione argumenty można stwierdzić że do małych projektów (funkcjonalnie oraz budżetowo) można zastosować Zend Search Lucene, natomiast do większych i dużych projektów operujących na dużej ilości danych powinno się zastosować silnik Xapiana.

Tabelaryczne zestawienie:

Zestawienie

HTML, World 2007, Power Point 2007, Excel 2007
RSS
Get Adobe Flash player