Przetwarzanie rich documents – po stronie wyszukiwarki, czy aplikacji ?

Korzystając z indeksowania tzw. „rich documents” powinniśmy się czasami zastanowić, gdzie chcemy dokonywać przetwarzania dokumentów – czy wysłać do Solr (lub innego silnika wyszukiwania, np. ElasticSearch) i zapomnieć, czy jednak wykorzystać Apache Tika przed wysłaniem dokumentu do indeksowania, do Solr wysyłać już tylko i wyłącznie tekst, który ma zostać zaindeksowany.

Opcje

Jak wspomniałem we wstępie, mamy dwie możliwości – pierwszą z nich jest wysyłanie plików binarnych do silnika wyszukiwania i zdanie 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 samych mechanizmów (prawie tych samych) w celu wydobycia treści jeszcze przed wysłaniem dokumentu do Solr. Oczywiście istnieje jeszcze trzecia opcja, mało realna w większości wypadków, czyli otrzymanie dokumentów w wygodnym formacie, który nie potrzebuje żadnego przetwarzania 🙂

Przetwarzanie po stronie silnika wyszukiwania

Najprostsze wyjście, czyli przetwarzanie danych po stronie silnika wyszukiwania. Niech to będzie Apache Solr. Konfigurujemy ExtractingRequestHandler w odpowiedni sposób i nie martwimy się o nic więcej. Jednak, nie zawsze jest to dobry pomysł. Wystarczy wyobrazić sobie sytuację, w której nasz serwer odpowiedzialny za indeksowanie, czyli master, jest na skraju wytrzymałości i pracuje przy prawie 100% utylizacji zasobów. Dodanie kolejnego źródła obciążenia nie wydaje się wtedy dobrym pomysłem. W takim wypadku należy zastanowić się nad tym, aby dane do indeksowania były przygotowane wcześniej.

Przetwarzanie poza silnikiem wyszukiwania

Jeżeli ilość danych binarnych jaką chcemy przetworzyć jest duża, lub nasz serwer, który odpowiada za indeksowanie danych jest mocno obciążony, wtedy należy przenieść przetwarzanie plików binarnych do aplikacji. Wykorzystując Apache Tika jesteśmy w stanie, w dość szybkim czasie zbudować rozwiązanie pozwalające na przetwarzanie dokumentów po stronie serwera aplikacji. Niestety wymaga to trochę wiedzy programistycznej i stworzenia kodu w języku Java (bądź dowolnym, który może wykorzystać bibliotekę Apache Tika). Tego typu podejście jest w stanie oszczędzić nam sytuacji w której nasz serwer indeksujący zapycha się, a ze względu na wolumen danych nie jesteśmy w stanie nic z tym zrobić.

Kilka słów na koniec

Raz na jakiś czas na solr.pl pojawiać się będą wpisy, które nie będą dotyczyć stricte funkcjonalności Solr, a problemów związanych ogólnie z silnikami wyszukiwania, ich wykorzystaniem oraz z architekturą systemów, których cześcią jest wyszukiwanie. Mamy nadzieję, że wpisy takie pozwolą nam wspólnie spojrzeć trochę szerzej na temat wyszukiwania informacji, niż z pozycji Solr i jego funkcjonalności 🙂

This entry was posted on poniedziałek, Czerwiec 11th, 2012 at 08:28 and is filed under Wyszukiwanie. 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 “Przetwarzanie rich documents – po stronie wyszukiwarki, czy aplikacji ?”

  1. redguy Says:

    Mam następujący problem: chciałbym zmodyfikować działanie Tika tak, aby wszystkie pliki graficzne przepuszczać przez zewnętrzny parser (generalnie chodzi o OCR). W konfiguracji ExtractingRequestHandler jest możliwość wskazania pliku konfiguracyjnego dla biblioteki Tika ([str name=”tika.config”]/my/path/to/tika.config[/str]), ale chyba nigdzie w sieci nie ma już dostępnego przykładu jak taki plik może wyglądać…
    TIA