Solr: Importowanie danych

Solr nie jest przesadnie przyjazny początkującym użytkownikom. Przygotowanie dobrej schemy wymaga pewnego doświadczenia. Zakładając, że mamy już przygotowaną konfigurację, pozostaje nam udostępnienie swoich danych serwerowi wyszukiwania oraz zadbanie o możliwość aktualizacji danych.

Sposobów na zaimportowanie danych jest kilka:

  • Update Handler
  • Cvs Request Handler
  • Data Import Handler
  • Extracting Request Handler (Solr Cell)
  • Skorzystać z bibliotek klienckich (np. Solrj)
  • Apache Connectors Framework (dawniej Lucene Connectors Framework)
  • Apache nutch

Do tego można jeszcze dodać streaming, jako sposób przesyłania danych. Jak widać, panuje tutaj pewne zamieszanie i ciężko na pierwszy rzut oka podać najlepszą metodę do zastosowania w konkretnym wypadku.

Update Handler

Chyba najbardziej popularna metoda, ze względu na prostotę. Wymaga przygotowania odpowiedniego XML oraz przesłanie go poprzez HTTP do serwera Solr. Umożliwia podbijanie ważności dokumentów i pojedynczych pól.

CSV Request Handler

W przypadku, gdy dane wejściowe mamy w postaci CSV (Coma Separated Values) lub TSV (Tab Separated Values) ta opcja może być najwygodniejsza. Niestety, w przeciwieństwie do Update Handler, nie ma możliwości podbijania ważności.

Data Import Handler

Ta metoda jest mniej popularna, wymaga dodatkowej, czasem dość skomplikowanej konfiguracji, jednak pozwala na bezpośrednie podpięcie się do źródła danych. Dzięki temu nie wymaga żadnych dodatkowych skryptów eksportujących dane ze źródła i konwertujących je na format wymagany przez Solr. Standardowo jest dostępna integracja z bazami danych (w oparciu o JDBC), źródłami udostępniającymi XML (np. RSS), email (poprzez protokół IMAP), dokumenty obsługiwane przez projekt apache Tika (np. Openoffice, word, rtf, html i wiele innych). Dodatkowo można dopisywać własne źródła i transformacje.

Extracting Request Handler (Solr Cell)

Wyspecjalizowany handler do indeksowania treści dokumentów przechowywanych w plikach o różnych formatach. Lista obsługiwanych formatów jest dość szeroka a do indeksowania wykorzystywany jest projekt apache Tika. Wadą tego rozwiązania jest konieczność budowania dodatkowych rozwiązań dostarczających do SOLR namiary na dokument i informacje o identyfikatorze dokumentu oraz brak możliwości uzupełniania dokumentów o dodatkowe, zewnętrzne względem dokumentu, metadane.

Biblioteki klienckie

Solr udostępnia biblioteki klienckie do wielu języków programowania. Ich możliwości różnią się miedzy sobą, natomiast w przypadku, gdy dane są generowane na bieżąco przez aplikację i czas, po którym te dane muszą być dostępne do wyszukiwania jest bardzo mały, indeksowanie w ten sposób często jest jedyną dostępną opcją.

Apache Connectors Framework

ACF jest to relatywnie nowy projekt, który szerszej publiczności objawił się na początku 2010 roku. Projekt początkowo był wewnętrznym projektem prowadzonym przez firmę MetaCarta, został przekazany społeczności open source i w chwili obecnej rozwijany w ramach inkubatora apache. W założeniu jest to system, który dzięki szeregowi wtyczek pozwala „wyklikać” połączenie ze źródłem danych. W chwili obecnej brak jest opublikowanych wersji, ale sam system już warty jest zainteresowania w przypadku konieczności integracji z takimi systemami jak: FileNet P8 (IBM), Documentum (EMC), LiveLink (OpenText), Patriarch (Memex), Meridio (Autonomy), Windows shares (Microsoft) i SharePoint (Microsoft).

Apache nutch

Nutch to zasadzie to oddzielny projekt prowadzony przez Apache (wcześniej w ramach Apache Lucene). Dla osoby zajmującej się serwerem Solr jest on o tyle ciekawy, że pozwala na taką konfigurację, która umożliwia pobieranie stron WWW i indeksowanie ich poprzez Solr.

Słowo o streamingu

Streaming oznacza możliwość powiadomienia Solr,  skąd pobrać dane do zindeksowania. Pozwala to na uniknięcie zbędnego przesyłania danych przez sieć, jeśli dane znajdują się na zasobie lokalnym względem serwera indeksującego, lub podwójnego przesyłania danych (ze źródła do importera, z importera do Solra).

I słowo o bezpieczeństwie

Solr z założenia jest przewidziany do stosowania w architekturze zakładającej pracę w środowisku bezpiecznym. Bardzo ważne jest jednak zwrócenie uwagi na to, kto i jakie polecenia jest w stanie wykonywać. O ile zwracane dane można w miarę prosto ograniczyć, poprzez wymuszenie stosowania filtrów w definicji handlerów, o tyle w przypadku indeksowania nie jest to już takie proste. W szczególności niebezpieczny wydaje się być Solr Cell – nie tylko pozwoli na odczytanie dowolnego pliku, do którego ma dostęp Solr (np. pliki z hasłami), ale dodatkowo da możliwość atakującemu na ich wygodne przeszukiwanie w celu uzyskania przydatnych informacji 🙂

Inne opcje

Powyżej starałem się uwzględnić opcje, które nie wymagają dodatkowej pracy. Problemem może być definicja tej dodatkowej pracy, bo czasem łatwiej napisać dodatkową wtyczkę, niż przebijać się przez niezliczone opcje konfiguracyjne czy tworzyć gigantyczne XMLe. Dlatego też w wyborze metod kierowałem się własnym wyczuciem, co skutkowało pominięciem kilku sposobów (np. pobieranie danych ze stron WWW za pomocą Apache Droids lub Heritrixa, czy rozwiązania oparte o Open Pipeline lub Open Pipe).

Na pewno w tym krótkim artykule udało mi się pominąć jakieś ciekawe sposoby. Jeśli tak, proszę o komentarze, chętnie uaktualnię ten wpis 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *