Wprowadzenie do Solr

W miarę rozwoju systemu informatycznego architekci oprogramowania i programiści muszą mierzyć się z coraz to nowymi wyzwaniami, które rzadko zostają uchwycone na początku realizacji projektu. Najczęściej są to problemy wydajnościowe, związane ze wzrostem wolumenu danych.
Z jednej strony to rzecz nieunikniona i pożądana przez właściciela systemu, z drugiej duży wolumen danych stanowi punkt wyjścia do przeprowadzenia niezbędnego procesu optymalizacji procesów wyszukiwania danych. Jeśli rozwijamy platformę business-to-business to prędzej czy później jej właściciel zgłosi potrzebę zaimplementowania wyszukiwarki produktów i usług dostępnych na platformie.

Dostarczenie wydajnej, dobrze skalowalnej i działającej w trybie near real-time data wyszukiwarki jest zadaniem niebanalnym, dlatego nawet najmniejsze zbagatelizowanie tematu może doprowadzić cały projekt do klęski. Na rynku istnieje wiele gotowych rozwiązań godnych polecenia. Poniżej przeczytacie o jednym z nich.

Apache Solr.

solr_homepage

Czym jest?

  • Biblioteką Javy umożliwiająca implementację wyszukiwania pełnotekstowego, ale nie tylko.  Solr umożliwia wyszukiwanie za pomocą słów kluczowych, dostarcza mechanizm podpowiadania, wspiera wyszukiwanie za pomocą synonimów czy wyszukiwanie geoprzestrzenne.
  • Dostępny jest na licencji Open Source (http://svn.apache.org/viewvc/lucene/dev/).
  • Duża społeczność, wyrażona nie tylko w ilości aktywnych deweloperów, ale również w ilości grup dyskusyjnych i słuchaczy.
    http://solr.meetup.com/
    Solr_Meetup_Groups_-_Meetup_-_2015-01-25_00.08.46 Najbliższa grupa działa w Warszawie: http://www.meetup.com/es-warsaw/.
  • Wewnetrznie używa dobrze znanej biblioteki Apache Lucene. O porównaniu i rozgraniczeniu pomiędzy obydwoma bibliotekami przeczytasz na
  • Obie technologie są rozwijane i utrzymywane przez Apache Foundation.
  • Solr uruchamiany jest jako web-aplikacja Javy, która może zostać uruchomiona na dowolnym serwerze zgodnym ze specyfikacja serwletów, takich jak Tomcat lub Jetty i innych, w pełni implementujących specyfikację JEE. Z jego usługami integrujemy się za pomocą REST-like API.

Co wyróżnia Apache Solr?

  • szybkość – Solr potrafi wykonać nawet skomplikowane zapytania użytkownika w ciągu kilkudziesięciu milisekund,
  • wolumen danych – Solr został zaprojektowany by pracować z indeksami opartymi na dziesiątkach milionów dokumentów,
  • skalowalność – Solr skaluje proces indeksowania danych oraz przetwarzania zapytań użytkownika na wszystkie serwery dostępne w klastrze,
  • instalacja – Solr jest łatwy do instalacji i konfiguracji, dostarczając wiele gotowych przykładów konfiguracji,
  • sortowanie – Solr zwraca dokumenty posortowane wedle ich trafności i zgodności do zapytania użytkownika,
  • język naturalny – Solr wspiera wyszukiwanie tekstowe w języku naturalnym, czyli w treści e-maili, stron WWW, dokumentów PDF i tym podobnych.

Podsumowanie.

Należy pamiętać, że wyszukiwarki zostały zaprojektowane by wspierać operacje odczytu danych, natomiast w innych typach operacji na danych są powolne i niewydajne. Kiedy powinno się rozważyć użycie Apache Solr? Został on zoptymalizowany do wspierania wyszukiwania w wolumenie danych jeśli:

  • zawiera tekst w formie, którą użytkownicy chcą wyszukać, czyli ustrukturyzowany za pomocą języka naturalnego,
  • tekst będzie dużo częściej odczytywany niż zmieniany,
  • oparty jest na płaskich dokumentach, to znaczy takich, które nie zawierają referencji do innych dokumentów. Jeśli źródło danych jest w bazie danych, to dane powinny być najpierw zdenormalizowane w taki sposób, by dokumenty zawierały wartości pól do wyszukiwania i prezentacji użytkownikowi,
  • dokumenty są heterogeniczne, to znaczy że nie muszą być identycznego typu, jak ma to miejsce w przypadku krotek w bazie danych,
  • wolumen danych jest na tyle duży, że nie pozwala na wydajne użycie wbudowanych w bazę danych mechanizmów wyszukiwania, jeśli to tam są przechowywane dane.

Do czego nie używać Apache Solr?

  • do zwracania dużej ilości wyników jednocześnie. Mechanizmy wyszukiwarki zostały zaprojektowany w ten sposób, by zwracać jednocześnie wąski zakres wyników, pomiędzy 10 – 100. Aby otrzymać więcej wyników, należy użyć wbudowanego mechanizmu stronicowania. W zapytaniu, które zwraca milion dokumentów, próba otrzymania wszystkich naraz skończy się dużym zużyciem pamięci i równie długim czasem oczekiwania. Samo zapytanie wykona się bardzo szybko, natomiast wewnętrzna struktury indeksu nie jest przygotowana na tworzenie wielu obiektów wyników jednocześnie,
  • nie nadaje się do przeszukiwania skomplikowanej struktury relacyjnej,
  • nie dostarcza modelu zarządzania uprawnieniami do dokumentów w indeksie.

Polecam również wspaniałą książkę, z której czerpałem wiedzę: Solr in Action.