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.

This post is also available in: angielski

This entry was posted on poniedziałek, Marzec 21st, 2011 at 09:16 and is filed under Solr. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “Integracja Solr z Tika (cz. 1 – podstawy)”

  1. Przetwarzanie rich documents – po stronie wyszukiwarki, czy aplikacji ? | Solr Enterprise Search Says:

    […] się np. na ExtractingRequestHandler (informacje o integracji Solr z Apache Tika można znaleźć tutaj) w przypadku Solr, aby wykonał za nas całą pracę. Druga możliwość to wykorzystanie tych […]