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 🙂

Dodaj komentarz

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