Obserwując listy dyskusyjne możemy trafić na rozmowy o funkcjonalności Solr, której nazwa brzmi dość dziwnie – Solritas. Co to za funkcjonalność ? Jakie ma zastosowanie ? Aby poznać odpowiedzi na te pytania zapraszam do lektury dalszej części wpisu.
Należy pamiętać, iż opisywana funkcjonalność dostępna jest w Solr od wersji 1.4. Dokładniej, w Solr w wersji 1.4 oraz 1.4.1 funkcjonalność jest udostępniania w Solr, jako dodatek dostępny w katalogu contrib. Natomiast w wersji 4.0 (trunk w svn) jest to już jedna ze standardowych funkcjonalności.
Solritas, czyli co ?
Przeglądając plik solrconfig.xml dostarczany z przykładową konfiguracją najnowszych wersji Solr możemy trafić na następującą definicję:
<requestHandler name="/browse"> <lst name="defaults"> <str name="wt">velocity</str> <str name="v.template">browse</str> <str name="v.layout">layout</str> <str name="title">Solritas</str> <str name="defType">dismax</str> <str name="q.alt">*:*</str> <str name="rows">10</str> <str name="fl">*,score</str> <str name="facet">on</str> <str name="facet.field">cat</str> <str name="facet.field">manu_exact</str> <str name="facet.mincount">1</str> <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4</str> <str name="hl">on</str> <str name="hl.fl">text features name</str> <str name="f.name.hl.fragsize">0</str> <str name="f.name.hl.alternateField">name</str> </lst> </requestHandler>
Bliższe przyjrzenie się powyższej konfiguracji może dać już odpowiedź osobie, która miała do czynienia z różnymi formatami szablonów. Powyższy wpis definiuje handler oparty o solr.SearchHandler, ale z innym, niż można by było podejrzewać response writerem – VelocityResponseWriter. Umożliwia on przetwarzanie wyników odpowiedzi z wykorzystaniem systemu szablonów jakim jest Velocity (http://velocity.apache.org/). Dzięki wykorzystaniu takiego rozwiązania jesteśmy w stanie w bardzo szybkim czasie stworzyć prototyp i zaprezentować wyniki wyszukiwania w przystępny, dla np. użytkownika biznesowego, sposób. Nie ma konieczności pisania od podstaw aplikacji wykorzystującej Solr – tworzymy własny szablon i gotowe, możemy korzystać z Solr, który będzie opakowywał wyniki wyszukiwania w nasz szablon.
Konfiguracja
Powyżej przedstawiona konfiguracja została skopiowana z przykładowej konfiguracji dostarczanej z Solr. Co jednak oznaczają poszczególne parametry i jakie mamy możliwości wpływania na zachowanie Velocity ?
Aby zacząć korzystać z Solritas, należy wykonać kilka zmian w konfiguracji:
- Dodać informacje o tym, że chcemy wykorzystywać VelocityResponseWriter.
- Dodać odpowiednią definicję handlera (określającą wykorzystanie odpowiedniego formatu odpowiedzi i konfiguracji Velocity, na przykład taką jak przedstawiona powyżej).
- W przypadku korzystania z Solr w wersji 1.4.x należy zadbać o odpowiednie odpowiednie wersje bibliotek (należy skopiować je z katalogu /contrib/velocity/src/main/lib do katalogu z bibliotekami rdzenia, w którym chcemy użyć Solritas). Te biblioteki to:
- apache-solr-velocity-1.4.dev.jar
- commons-beanutils-1.7.0.jar
- commons-collections-3.2.1.jar
- velocity-1.6.1.jar
- velocity-tools-2.0-beta3.jar
Po spełnieniu powyższych warunków i uruchomieniu Solr możemy sprawdzić, czy funkcjonalność działa. W tym celu należy dowolną metodą (np. za pomocą przeglądarki) wejść na adres: http://localhost:8983/solr/browse. Naszym oczom powinnien ukazać się prosta formatka umożliwiająca wyszukiwanie, posiadająca funkcjonalność autocomplete oraz pokazująca prosty faceting.
Ale co z tymi parametrami ?
Solritas, czy inaczej, VelocityResponseWriter posiada szereg parametrów pozwalających konfigurować jego zachowanie. Te parametry to:
- v.template – nazwa szablonu Velocity, który ma zostać użyty do wyświetlenia strony. Nazwę szablonu podajemy bez rozszerzenia ’.vm’. W przypadku braku tego parametru zostanie wybrany domyślny szablon o nazwie default.
- debugQuery – podobnie jak w przypadku zwykłych zapytań przy pomocy metody GET, tak samo w tym wypadku istnieje możliwość pobrania dodatkowych informacji dotyczących przetwarzania zapytania. W przypadku ustawienia tego parametru na wartość true, oprócz dodatkowych informacji w stopce strony, każdy wynik będzie zawierał dodatkowe informacje diagnostyczne.
- v.json – parametr umożliwiający opakowanie odpowiedzi Velocity w funkcję JSON`a o nazwie podanej jako wartość parametru.
- v.layout – nazwa szablonu, który będzie zawierał szablon zdefiniowany w parametrze v.template. W tym wypadku zawartość szablonu zdefiniowanego w parametrze v.template zostanie umieszczona w zmiennej $content w celu użycia w szablonie zdefiniowanym w opisywanym parametrze.
- v.base_dir – określa katalog z którego mają być ładowane szablony. Wartość domyślna parametru to conf/velocity/.
- v.properties – określa plik z konfiguracją Velocity. Domyślna wartość parametru to velocity.properties.
- v.contentsType – ustawia nagłówek HTTP odpowiedzialny za przenoszenie informacji o rodzaju treści.
Kontekst Velocity
Osoby, które miały styczność z Velocity wiedzą, iż w tzw. kontekście można umieszczać obiekty klas pomocniczych, ułatwiające generowanie strony przez szablony. VelocityResponseWriter udostępnia w swoim kontekście szereg takich właśnie helperów, pod odpowiednimi skrótami dostępne są następujące klasy pomocnicze:
- esc – instancja EscapeTool
- date – instancja ComparisonDateTool
- list – instancja ListTool
- math – instancja MathTool
- number – instancja NumberTool
- page – instancja PageTool
- sort – instancja SortTool
- request – obiekt klasy SolrQueryRequest
- response – obiekt klasy SolrQueryResponse
Po więcej informacji na temat poszczególnych klas pomocniczych zapraszam na http://velocity.apache.org/.
Słów kilka na koniec
Jeżeli potrzebujemy szybko wygenerować graficzny interfejs użytkownika i pokazać go, gdzieś dalej, to Solritas będzie bardzo dobrym rozwiązaniem. Bez pisania dodatkowej warstwy jesteśmy w stanie szybko zdefiniować szablon i pokazać wyniki wyszukiwania w formie bardziej przystępnej dla na przykład osób nie technicznych.
Jako, że jest to jeden z pierwszych wpisów otwierający serię „szybkich spojrzeń” na mniej lub bardziej znane funkcjonalności Solr wszystkie uwagi, pomysły i spostrzeżenia będą bardzo mile widziane. Zapraszam do komentowania.