W dziedzinie silników wyszukiwania typu open source liderami są SOLR i Elasticsearch. Ich wspólną cechą jest Lucene – oprogramowanie, na którym bazują obie wyszukiwarki. Różnic jest jednak dużo, dlatego wybór między nimi musi być subiektywny. Aby dobrze wybrać, trzeba zdać sobie sprawę ze swoich potrzeb i do nich dopasować odpowiednią wyszukiwarkę.

 

SOLR oraz Elastic Search

 
Cache globalne lub cząstkowe

Oba silniki wyszukiwania posiadają skomplikowany system korzystania z plików podręcznych. Indeksowanie w Lucene odbywa się na plikach danych i nie można tego zmienić. Indeksy podzielone są na segmenty. W trakcie indeksowania tworzone są nowe segmenty, a jednocześnie Lucene potrafi tworzyć segmenty duże z małych.

 
Deweloperzy Elasticsearch postanowili skorzystać z pewnej zależności, występującej we współpracy plików cache i segmentów. W trakcie zmiany w segmencie tylko mały fragment danych musi zostać odświeżony. Z drugiej strony SOLR korzysta z metody globalnej, oznaczającej, że każda najmniejsza zmiana musi odświeżyć całość bazy danych. To rozwiązanie jest bardziej czasochłonne, ale wzmacnia też hardware.

 
Wykonywanie zapytań

Zapytania zawężające zakres poszukiwana nie zawsze są dobre dla osiągów wyszukiwarki. Nic dziwnego, skoro cała baza danych musi zostać przeszukana w celu odnalezienia rekordów spełniających wymagania. Wartości doc mogą zredukować czas wyszukiwania. W Elasticsearch te wartości są automatycznie uruchamiane. Oznacza to, że silnik wyszukiwania wie, czy musi przeszukać wszystkie dokumenty, czy tylko iterację podzbioru. SOLR nie posiada takiej funkcji, przez co zapytania zawężające zakres potrwają dłużej.

 
Wyszukiwania węzła sieci (node)

Każdy z porównywanych silników wyszukiwania inaczej podchodzi do wyszukiwania nody. Proces ten jest odpowiedzialny za podejmowanie akcji, w razie stworzenia nowego klastera, zniszczenia noda lub gdy nowy node jest dodany do klastera. SOLR, w wymienionych sytuacjach, korzysta z Apache Zookepera. Do implementacji potrzebne są minimum trzy instancje. Natomiast Elasticsearch korzysta z Zena. Aby zdobyć pełną tolerancję, muszą być trzy masternody.

 
Wysoka wydajność i silniki analizy precyzyjnej

Jeśli dane, na których operujesz są niezmienne, a wysoka wydajność i precyzyjność to dla Ciebie priorytet – SOLR jest lepszym wyborem. Radzi sobie w tej kwestii lepiej od Elasticsearch, ponieważ w SOLR nie zachodzi degradacja z powodu utraty precyzyjności.

 

Wsparcie techniczne i deweloperskie

Tutaj różnice nabierają kontrastu. Elasticsearch jest podmiotem w pełni komercyjnym, podczas gdy SOLR należy do Apache Software Foundation. Apache to platforma otwartego kodu oparta na społeczności. Deweloperzy mogą modyfikować kod i każdy, kto udowodni swoje zdolności może wspomóc wspólną sprawę. Na straży stoi społeczność, a każdy jej członek znający filozofie i podejście Apache wie na jak wysokim poziomie stoi współpraca twórców.

 
Z drugiej strony jest Elasticsearch, którzy zezwalają na modyfikowanie kodu, ale ostateczna decyzja o implementacji należy do Elastic. Członkowie społeczności nie mogą samodzielnie kreować kształtu produktu, bo najważniejszymi i decyzyjnymi twórcami są pracownicy Elastic.

 
Konfiguracja i instalacja

W tej chwili, pakiet startowy Elasticsearch stanowi ⅙ rozmiaru SOLR’a. Dzięki konfiguracji JSON, również proces instalacji jest łatwiejszy i dużo szybszy w Elastic. Posiada on jednak pewne ograniczenia, jak np. brak możliwości komentowania każdej zmiany w plikach. Deweloperzy SOLR usunęli kłopotliwe komplikacje, które istniały w poprzednich iteracjach. Dokonano tego przy użyciu Rest API. Jeśli więc pracujesz przy projekcie, do którego nie używasz JSON’a, lepszym wyborem będzie SOLR.

 
Uczenie maszynowe

Dla maszynowego uczenia się Elasticsearch wykorzystuje X-Pack. To komercyjna wtyczka, która współpracuje z Kibana. Zapewnia on algorytmy dla maszyn uczących się. Jego plusem jest szereg dodatkowych narzędzi, ale minusem są wysokie koszty. Dla użytkownika Elasticsearch są pewne alternatywy dostępne poprzez cloud’a, komercyjne software house’y lub narzędzia otwartego dostępu. SOLR zapewnia maszynowe uczenie za darmo. Proces polega na klasyfikacji bazującej na implementacji regresji logicznej.

 
Narzędzia i wyposażenie

W tej kwestii, Elasticsearch wiedze prym. Posiada ogromną ilość narzędzi jak np. wspomniana Kibana. Jeśli jednak chcesz pisać na SQLu, dokonasz tego korzystając z połączenia SOLR z Apache Zeppelin. Niestety żadne z zapewnionych przez SOLR narzędzi nie spełnia współczesnych wymagań. Środowisko Elasticsearch jest nowsze, częściej aktualizowane i wzbogacane nowymi funkcjami. Widać to również przez ilość firm, które korzystają z Elasticsearch, również w dziedzinie data shippingu.

 
Współpraca deweloperów i IT (DevOps)

W tej kwestii SOLR wypada gorzej w oczach sympatyków DevOps. Informacje zwrotne są ograniczone i poszatkowane. Jedynie część przecieka przez JMX MBean, jak również przez nowe Metrics API. Elasticsearch zaszło dalej. Ich diagnostyka jest ułatwiona przez dostęp do takich danych jak statystyki pracy, zużycie dysku, pamięci, przetrzymywania i buforowania informacji. Oprócz tego posiada lepsze API i łatwiejszą instalację.

 
Prędkość i przeszukiwanie pełnotekstowe

Trudno jednoznacznie określić, który z tych silników wyszukiwania jest szybszy. Elasticsearch lepiej radzi sobie w szybko zmieniającym się środowisku. Z drugiej strony, SOLR, przez sposób korzystania z pamięci podręcznej, będzie lepszy dla danych niezmiennych. SOLR wiedze prym w kwestii wyszukiwania pełnotekstowego, ponieważ posiada dla niego wiele specjalnych funkcji. Między nimi znajduje się funkcja poprawy błędów wpisywanych haseł, analizatory składniowe i implementacja sugestii wyszukiwania. W przypadku Elasticsearch jest jedno dedykowane narzędzie podpowiadające. Oznacza to, że implementacja jest łatwa, ale pozbawiona możliwości wprowadzania zmian w kodzie. To zmniejsza jego elastyczność. SOLR oferuje więc więcej opcji konfiguracji wyszukiwania.

 
Ostateczny rachunek

Trudno określić który z tych silników wyszukiwania jest lepszy. Wszystko zależy od wymagań dewelopera i projektu, nad którym pracuje. Musisz więc zadać sobie kilka pytań – jakie środowisko preferujesz? Jak łatwa ma być instalacja i konfiguracja? Ale najważniejsze – jakiego typu dane silnik ma obsługiwać? Każdy z produktów posiada inne walory i tylko na podstawie konkretnych wymagań możesz dokonać odpowiedniego wyboru.