Data Import Handler – import danych z baz SQL (cz. 1)

W artykule o sposobach importu danych (http://solr.pl/2010/09/06/solr-importowanie-danych/) wspomniałem o Data Import Handler (DIH). Podstawową zaletą tego sposobu importowania jest brak konieczności tworzenia dodatkowego oprogramowania oraz szybka integracja ze źródłem danych. Ta druga zaleta wymaga jednak wprawy i praktyki. W tym wpisie przedstawię podstawy integracji DIH ze źródłem danych SQL.

W przykładach użyta została baza PostgeSQL zawierająca dane polskiej wikipedii. Testowa instancja solr została zdefiniowana jako rdzeń „wikipedia” i dostępna była pod adresem:

http://localhost:8983/solr/wikipedia/admin/

Konfiguracja solrconfig.xml

Konfiguracja sprowadza się do dodania dodatkowego requestHandlera. Parametr: config określa plik konfiguracyjny, w którym znajduje się definicja źródła danych.

Dzięki takiej definicji zyskujemy możliwość wywoływania adresu HTTP obsługującego import:

  • /dataimport – w celu uzyskania aktualnego statusu
  • /dataimport?command=reload-config – w celu ponownego odczytania konfiguracji
  • /dataimport?command=full-import – w celu zlecenia rozpoczęcia pełnego indeksowania danych
  • /dataimport?command=delta-import – w celu zlecenia rozpoczęcia indeksowania przyrostowego

(dla mojej konfiguracji pełen adres to: http://localhost:8983/solr/wikipedia/dataimport)

Powyżej widzimy dwie możliwości importowania danych: import pełny i przyrostowy.

Pełny import danych polega na każdorazowym wczytaniu wszystkich danych, które powinny znaleźć się w indeksie, podczas gdy import przyrostowy oznacza tylko dodanie i aktualizację w indeksie tych danych, które zmieniły się od ostatniego indeksowania. Pełny import zwykle trwa znacznie dłużej stąd prosty wniosek: jeśli czas pełnego indeksowania nie jest dla nas problemem – prawdopodobnie nie warto zawracać sobie głowy konfiguracją indeksowania przyrostowego, zwłaszcza, że nakłada ono  dodatkowe wymagania na strukturę źródła danych.

Warto zaznaczyć, że pełny import domyślnie rozpoczyna się od usunięcia istniejącego indeksu. Istnieje możliwość uniknięcia takiego zachowania poprzez dodanie parametru: clean=false.

Konfiguracja źródła danych

Konfiguracja polega na zdefiniowaniu zapytań pozwalających solr na pobieranie danych do indeksowania i zawiera się w pliku określonym przy definicji handlera (u nas: db-data-config.xml) W tym wpisie zaczniemy od zdefiniowania pełnego importu. Następnie, w kolejnej części artykułu rozbudujemy go o możliwość importowania przyrostowego.

Pełny import

Jak widzimy definicja źródła składa się z opisu sposobu połączenia do baz danych oraz opisu indeksowanego dokumentu. Import następuje zgodnie z następującym algorytmem:

  1. Usuwany jest stary indeks (jeśli nie użyto parametru clean=false)
  2. Solr po wywołaniu komendy indeksowania nawiązuje połączenie do bazy danych.
  3. Definiowany jest kursor bazodanowy wykorzystujący zapytanie określone w argumencie „query” w głównej encji
  4. Pobierana jest porcja danych
  5. Dla każdego pobranego rekordu definiowane są zmienne postaci <nazwa encji>.<zwracana kolumna>, dzięki czemu do zwróconych wartości można odwołać się w encjach zagnieżdżonych
  6. Wykonywane są zapytania z encji zagnieżdżonych
  7. Encja może zawierać definicje pól. Dzięki temu Solr jest w stanie określić mapowanie kolumny z wyniku na pole dokumentu zdefiniowane w schema.xml
  8. Dokument stworzony dzięki wartościom zwróconych przez zapytania jest dodawany do indeksu
  9. Jeśli kursor posiada kolejne wyniki następuje skok do punktu 4.
  10. Następuje zapisanie danych do pliku dataimport.properties, dane zostają zatwierdzone (commit) i wykonywana jest optymalizacja indeksu

Po uruchomieniu solr i wejściu na stronę: http://localhost:8983/solr/wikipedia/dataimport pojawiła sie odpowiedź:

Uwagę zwraca wpis: status: idle. Oznacza to, że nasz importer jest gotowy do pracy. W innym przypadku (np. Błąd poprawności XML konfiguracyjnego) dostaniemy opis wyjątku. Niestety na tym etapie nie są wykrywane jeszcze błędy związane np. z niewłaściwą definicją połączenia do bazy lub braku sterownika JDBC.

Wchodzimy więc na stronę: http://localhost:8983/solr/wikipedia/dataimport?command=full-import

To co powinniśmy otrzymać, to podobny jak wyżej XML. Jednak po ponownym wejściu na stronę: http://localhost:8983/solr/wikipedia/dataimport dostajemy już inny wynik.

Czyli importer pracuje.

Po pewnym czasie, zależnym od ilości indeksowanych danych i szybkości komputera otrzymamy:

Jak widzimy indeksacja zakończyła się sukcesem.

W kolejnym odcinku spróbujemy dodać możliwość importowania przyrostowego.

5 thoughts on “Data Import Handler – import danych z baz SQL (cz. 1)

  • 11 października 2010 at 08:46
    Permalink

    Chyba najbardziej przydatny artykuł do tej pory! w końcu opisane jak coś zrobić:)
    w cz.2 proponuję rozpatrzyć delta-import i full-import, który działa jak delta-import (ja stosuje ten drugi).

    Pozdrawiam!

    Reply
    • 11 października 2010 at 09:00
      Permalink

      Dzięki. Mamy w planach eksploatowanie tego tematu, bo raz: to co zostało tutaj napisane, to wierzchołek góry lodowej, a dwa: DIH potrafi czasem zaoszczędzić sporo pracy przy integracji z dostarczycielami treści do wyszukiwania 🙂

      Reply
  • 12 października 2010 at 11:01
    Permalink

    koniecznie trzeba to rozwinąć:) w końcu coś po polsku porządnie napisane o solr:)

    Reply
  • Pingback:Solr.pl – 23.11.2010 | Solr, Lucene i inne

  • 15 grudnia 2010 at 09:33
    Permalink

    Super blog. Pierwszy raz tu jestem i bardzo mi sie podoba. Bede tu na pewno zagladac i mam nadzieje, ze bedzie systematycznie rozwijany 🙂

    Reply

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *