Integracja Solr z Tika (cz. 1 – podstawy)

Indeksowanie tzw, „rich documents”, czyli plików w formacie pdf, doc, rtf i tak dalej (lub też plików binarnych) zawsze wymagało pewnej pracy po stronie dewelopera w celu wyciągnięcia interesujących go treści, a następnie przygotowanie ich w formacie zrozumiałym dla wyszukiwarki, w tym wypadku dla Solr. Aby zminimalizować tą pracę postanowiłem przyjrzeć się Apache Tika i integracji tej biblioteki z Solr.

W ramach wstępu

Na początek kilka słów o samych możliwościach Apache Tika. Apache Tika to framework służący do wydobywania informacji z tzw. rich documents, czyli dokumentów takich jak pliki pdf, pliki w formacie microsoft office, rtf, ale nie tylko. Za pomocą Apache Tika można także wydobywać informacje z dokumentów spakowanych, plików w formacie HTML, obrazków (np. jpg, png, gif), plików audio (np. mp3, midi, wave), czy np. skompilowanych do kodu bajtowego plików Javy. Dodatkowo Apache Tika potrafi wykryć typ przetwarzanego pliku, co dodatkowo ułatwia nam pracę z tego typu dokumentami. Warto wspomnieć, iż opisywany framework oparty jest na takich bibliotekach jak PDFBox, Apache POI, czy Neko HTML, co pośrednio gwarantuje nam bardzo dobre wyniki wydobywanych z dokumentów danych.

Przykładowa struktura indeksu

Pominę, jak ręcznie uruchamiać wydobywanie treści z dokumentów w Apache Tika i skupię się na integracji tego framework`a z Solr i jak banalne jest to rozwiązanie. Załóżmy, iż interesuje nas identyfikator, tytuł oraz treść danego dokumentu i takie dokumenty mamy. Tworzymy zatem prosty plik schema.xml opisujący strukturę indeksu, który mógłby wyglądać następująco:

<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="tytul" type="text" indexed="true" stored="true"/>
<field name="zawartosc" type="text" indexed="true" stored="false" multiValued="true"/>

Konfiguracja

Do pliku solrconfig.xml dodajemy następujący wpis definiujący handler, który będzie obsługiwał indeksowanie dokumentów z wykorzystaniem Apache Tika:

<requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
   <lst name="defaults">
      <str name="fmap.Last-Modified">ostatnia_modyfikacja</str>
      <str name="uprefix">ignored_</str>
    </lst>
</requestHandler>

Wszystkie żądania aktualizacji kierowane do adresu /update/extract będą obsługiwane przez Apache Tika. Należy oczywiście pamiętać, aby po zaindeksowaniu plików wysłać komendę commit do odpowiedniego handlera, który w przykładowym pliku solrconfig.xml dostarczanym z Solr znajduje się pod adresem /update.

Na uwagę zasługują jeszcze dwie rzeczy, a dokładniej parametry samego handlera. W pokazanej konfiguracji mówimy handlerowi o tym, aby przypisał atrybut Last-Modified do pola ostatnia_modyfikacja oraz aby ignorował pola, których nie zna.

Uwagi dodatkowe

Należy pamiętać także o zmianie limitów wielkości dokumentów, jakie przyjmuje Solr, jeżeli mamy zamiar indeksować duże dokumenty, można to zrobić poprzez zmianę następujących wartości w solrconfig.xml:

<requestDispatcher handleSelect="true">
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="10240" />
fmap.Last-Modified

Na koniec

Wszystkie parametry ExtractingRequestHandlera opisane są pod adresem: http://wiki.apache.org/solr/ExtractingRequestHandler.

Dodaj komentarz

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