Mittwoch, 23. Mai 2012


Artikel

Mai 2009 | Artikel

Apache Lucene: Futter für den Index

(Link zum Artikel: http://www.entwickler.de/jaxenter//002307)

Nutch, Droids, Tika

Text: Bernd Fondermann
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Das Finetuning des Ergebnis-Rankings ist eine schöne Beschäftigung für Suchmaschinenadministratoren. Entscheidend für das Ergebnis ist aber, was in den Index reingesteckt wurde. Die letzte Folge unserer Serie über die Lucene-Produktfamilie beschäftigt sich deshalb mit dem Anfang des Prozesses: Text sammeln als Indexfutter.
Teil 1   Teil 2   

Zurecht kann man den Autor dieser kleinen Lucene-Staffelung schelten, dass er das Pferd von hinten aufzäume; steht doch die Bereitstellung von Text eigentlich am Beginn des Suchprozesses und ein leerer Index wird kaum zu einer Fülle von Treffern führen. Aber soll man sich das Schönste nicht für zuletzt aufheben? Als Wiedergutmachung beschäftigen wir uns diesmal gleich mit drei Lucene-Produkten auf einmal.

In a Nutchshell

Von Apache Nutch ist am 23. März dieses Jahres die Version 1.0 herausgekommen, vorher war jahrelang Version 0.9 im Einsatz. Nutch durchforstet Webseiten, um daraus einen Suchindex aufzubauen. Ehre, wem Ehre gebührt: Nutch ist auch die Keimzelle, aus der Apache Hadoop hervorgegangen ist, seinerseits mittlerweile ein sehr erfolgreiches Projekt mit vielen Produkten.

Hadoop dient Nutch als Speicherunterbau. Es stellt ein verteiltes Dateisystem zur Verfügung, in dem Nutch die von ihm besuchten Webseiten speichert. Dieses Dateisystem, "HDFS" genannt, kann bis in dreistellige Terabyte-Größenordnungen skalieren - vorausgesetzt, man hat so viele Maschinen mit dem entsprechenden Plattenplatz. Der Index von Nutch ist also auf Größe angelegt; beim Abgrasen des Internets kann schließlich so einiges zusammenkommen.

Um den Speicher von Nutch mit Webseiten zu füllen, steht ein so genannter Crawler zur Verfügung. Dieser Batch-Job besucht und speichert, ausgehend von einer Startseite, Teile des Internets oder ein Intranet. Dabei folgt er auch Links auf andere Webseiten und spannt auf diese Weise ein Teilnetz des World Wide Web auf, weshalb Jobs dieser Art auch "Spider" genannt werden. Aus dem von Spider besuchten textuellen Inhalt wird alles für eine Suche Relevante extrahiert (Tags, CSS und JavaScript werden aussortiert) und mit Lucene indiziert.

Die von Nutch erzeugten Lucene Documents (siehe den zweiten Teil der Serie) haben die in Tabelle 1 dargestellten Felder.

Feldname Bedeutung
title Titel der Seite, wie in der Kopfzeile des Browsers dargestellt
url Server, von dem die Seite gelesen wurde
content Indizierter Inhalt
anchor Auf diese Seite verlinkende andere Seiten
tstamp Wann wurde die Seite indiziert?
 
 

Tabelle 1: Von Nutch gespeicherte Felder (Auswahl)

Als Abfrage-Frontend liefert Nutch ein WAR-File mit, das dazu geeignet ist, in jedem Tomcat oder Jetty deployt zu werden. Es stellt eine Oberfläche bereit, wie sie von den gängigen Onlinesuchmaschinen bekannt ist, inklusive Vorschau der Webseiten aus lokalem Cache, Textausschnitt aus der Webseite mit hervorgehobenen Treffern und auf die Seite verlinkenden Seiten (Abb. 1). Das ist schon eine stattliche Ansammlung von Features für ein Open-Source-Projekt.

Die Roboter kommen?

Ein recht junges Projekt aus der vielseitigen Lucene-Familie ist Apache Droids. Es befindet sich derzeit im Apache Incubator, der obligatorischen Zwischenstation auf dem Weg zu einem vollwertigen Apache-Projekt.

Droids fordert wieder den ganzen Java-Programmierer. Es stellt ein jobbasiertes Framework zur Verfügung, um einen Crawler zu implementieren. Es zielt also auf ähnliche Anwendungsfälle wie Nutch, ist allerdings durch die Möglichkeit und Notwendigkeit, selbst Hand anzulegen, wesentlich flexibler in der Umsetzung.

Im Kern besteht Droids aus einer Batch-Job-Verwaltung. Jede Droid-Klasse verwaltet einen bestimmten Typ von Job. Der CrawlingDroid zum Beispiel erhält eine Liste von URLs zum Runterladen der dahinter stehenden Inhalte. Beim Start erzeugt der Droide eine TaskManager-Instanz, die wiederum für jeden URL einen Task erzeugt. Die Tasks können sequenziell oder parallel ablaufen. Die Abarbeitung jedes Tasks beinhaltet den Zugriff auf die Ressource und gegebenenfalls die Weiterverarbeitung der Inhalte. Ein Parser-Objekt ist dafür zuständig. Ein anderer mitgelieferter Droide ist der FileRenameDroid, der viele Dateien in einem Lauf umbenennen kann. Das Anwendungsfeld von Droids geht also über das Crawling allein hinaus.

Die Dokumentation von Apache Droids ist noch nicht so weit gediehen, als dass man das Framework ohne Studium des Quellcodes einsetzen kann. Auch ein offizielles Release lässt noch auf sich warten. Droids bedient sich übrigens für das Parsen von Dokumenten auch des letzten Kandidaten in unserem Reigen, Apache Tika.

Teil 1   Teil 2   

andere Artikel dieser Serie

Kommentare

Gravatar dog tags for dogs 07.12.2010
um 02:46 Uhr
This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post. #zitieren
Gravatar Bernhard Eckl 02.02.2011
um 12:58 Uhr
Kurze Anfängerfrage: Warum sollte man Tika verwenden anstatt Tools wie catdoc oder pdf2text? Ist es soviel besser, oder was ist der Unterschied? Ich plane demnächst auf Solr umzusteigen, daher die Frage. #zitieren
Gravatar Bernd Fondermann 04.02.2011
um 10:16 Uhr
Tika ist nicht auf PDF oder MS Office Files beschränkt. Es ist ein Framework/Wrapper um Libraries wie PDFBox, POI und andere. Als solches bietet es nicht nur ein einheitliches API, sondern erkennt auch die Formate anhand der Magic Bytes oder des MIME Formats und delegiert automatisch an die entsprechende Library. #zitieren