Instalacja i pierwsze uruchomienia Solr

Instalacja Apache Solr sprowadza się do poniższych 5 kroków:

  1. Sprawdzenie, czy system informatyczny wyposażony jest w Jave w wersji 6 lub wyższej. Jeśli nie, to należy sprawdzić na Google, jak zainstalować Oracle’s JVM w Twoim systemie operacyjnym.
  2. Pobranie najnowszej wersji Apache Solr ze strony: http://lucene.apache.org/solr/.
  3. Rozpakowanie pobranej wersji binarnej Apache Solr w wybrane miejsce w systemie plików.
  4. Uruchomienie przykładowej aplikacji. Wejście do katalogu instalacji $SOLR_INSTALL i dalej do katalogu example a następnie wykonać polecenie:
    $ java -jar start.jar
    

    W przypadku poprawnego uruchomienia serwera w logach powinna znaleźć się informacja:

    11805 [main] INFO  org.eclipse.jetty.server.AbstractConnector  – Started SocketConnector@0.0.0.0:8983
    

    Teraz w przeglądarce należy wpisać adres: http://localhost:8983/solr, żeby zobaczyć część administracyjną.
    screencapture-localhost-8983-solr

  5. Przy pierwszym uruchomieniu serwera Apache Solr, indeks nie zawiera żadnych dokumentów. Żeby wypróbować wyszukiwanie, najpierw trzeba dodać do indeksu dokumenty. Aby to zrobić należy przejść do katalogu instalacji $SOLR_INSTALL, dalej do katalogu example i exampledocs oraz wykonać polecenie:
    $ java -jar post.jar *.xml
    

    Teraz można wejść na panel administracyjny i w wybrać: Core Selector -> collection1 a potem Query i Execute query na dole ekranu. Teraz przykładowa konfiguracja powinna być gotowa do testowania.

Do dalszej przygody z Solr, należy zapamiętać, że $SOLR_INSTALL oznacza katalog instalacyjny Solr.

Historia Solr

Solr został stworzony przez Yonik Seeley w firmie CNET Networks w 2004 jako następca używanej wewnętrznie i wysłużonej komercyjnej wyszukiwarki.

Na początku 2006 roku na Solr oparto wyszukiwanie w większości serwisów tworzonych przez CNET. To również czas kiedy udostępniono kod źródłowy na zasadzie open source a projekt trafił pod skrzydła Apache Software Foundation jako podprojekt Apache Lucene.

W styczniu kolejnego roku, Solr ukończył status inkubacji w Apache i od tego czasu systematycznie rośnie ilość jego funkcji gromadząc wokół siebie liczne grono użytkowników i commiterów zebranych w Solr Community. Od tego czasu co rok wychodzą kolejne wersję wyszukiwarki.

Jako, że wewnętrznie Apache Solr używa Apache Lucene, w 2010 roku zostaje podjęta decyzja o połączeniu zespołów deweloperskich pracujących dotąd oddzielnie, celem uniknięcia powielania pracy. Numer wersji Solr wzrósł, by być zgodny z ówczesnym numerem wersji Lucene, tak więc po wersji 1.4 kolejną do pobrania była 3.1.

Końcówka 2012 roku przynosi wersję 4.0, przełomową jeśli chodzi o sposób zarządzania konfiguracją i skalowalnością – nazwanej SolrCloud.

Przez sześć pierwszych miesięcy 2013 roku wypuszczone zostają cztery kolejne wersje.

W grudniu 2014 roku najnowszą stabilną wersją Apache Solr jest 4.10.2.

Solr vs Lucene

Bez zbędnego wstępu, poniżej przedstawiam sposób wykorzystania Apache Lucene w projekcie Apache Solr.

solr-overview

  1. Apache Lucene jest biblioteką Javy używaną do budowania odwróconego indeksu na podstawie dostarczonego wolumenu dokumentów, przeszukiwania tekstowego w indeksie oraz sortowania wyników wyszukiwania pod względem zgodności z zapytaniem użytkownika,
  2. Apache Solr jest web-aplikacją 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,
  3. Apache Solr umożliwia łatwe zarządzanie konfiguracją Apache Lucene w projekcie. Przenosi konfiguracje z klas Javy na format zrozumiały dla zwykłego człowieka – xml,
  4. Apache Solr dostarcza dwa nowe typy pól do definiowania struktury indeksu: copy field and dynamic field. Copy field ułatwia pobranie wartości pól i zaaplikowania ich do innego pola. Dynamic field pomaga użyć pewnego pola jako typu dla innych pól bez konieczności zdefiniowania go w schema.xml,
  5. usługi Apache Solr udostępnione są za pomocą RESTful API. Do integracji można użyć XML, JSON czy HTTP,
  6. Apache Solr pozwala na działanie wielu indeksów jednocześnie,
  7. Apache Solr umożliwia prostą instalacje rozszerzeń za pomocą pluginów, które mogą zostać wykorzystane do zmiany sposobu zarządzania dokumentami w indeksie, przetwarzania zapytań czy sposobu analizy tekstu,
  8. Apache Solr dodaje automatyczną skalowalność indeksów i konfiguracji znanej jako SolrCloud.
  9. Apache Solr ułatwia implementację takich funkcji związanych z wyszukiwarką jak:
    • sortowanie i stronicowanie,
    • podpowiadanie przy wprowadzanie frazy wyszukiwania,
    • kategoryzacja wyników,
    • wyszukiwanie geoprzestrzenne,
    • obsługa literówek w wyszukiwanej frazie,
    • kolorowanie wyszukiwanych fraz w wynikach.

Jeśli jesteś programistą lub architektem oprogramowania i planujesz użyć Apache Lucene do swojego projektu, lepiej jeśli użyjesz Apache Solr, która jest stabilną i dojrzała technologią z prężnie działającą społecznością wokół niej. Dostarcza funkcji, których brakowało w oryginalnej Apache Lucene i działa zaraz po instalacji, dostarczając gotowej konfiguracji i przykładów do dostosowanie tej technologii do swoich potrzeb.

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.