Installationsanleitung Nutch

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

Nutch installieren und konfigurieren

Nutch wird für Module wie CityCall115 verwendet, kann aber für die Volltextsuche von Websites mit UTF-8 Encoding verwendet werden. Im Grunde besteht Nutch aus zwei funktionalen Komponenten:

  • dem Crawler
  • der Suche

Der Crawler ruft automatisch alle Seiten einer Website entsprechend der Konfiguration auf und indiziert deren Inhalte in einem sog. Lucene-Index.

Die Suche von Nutch kann über ein Servlet realisiert werden, welches in einem Tomcat-Server installiert werden kann. Alternativ kann die Suche auch über von uns zur Verfügung gestellte php Klassen erfolgen, die auf dem Zend-Framework aufbauten. Der Bedarf hängt von der Umsetzung der Suche ab. Sprechen Sie uns bei Fragen hierzu einfach an. Sitepark empfiehlt grundsätzlich Nutch lediglich für das Erstellen des Index (Crawler) zu verwenden und für die Suche PHP einzusetzen, da hier auf eine Tomcat-Installation verzichtet werden kann.

Installation des Crawlers

Für die Installation des Crawlers erhalten Sie von Sitepark ein gezippte Datei mit allen benötigten Inhalten: sitepark-nutch-0.8.1.tar.gz. Diese kann auf dem Zielsystem im $SITEPARK_HOME entpackt werden. Anschließend wird in $SITEPARK_HOME ein sog. Symbolischer Link nutch erzeugt. Das von Sitepark gelieferte Paket verfügt bereits über Erweiterungen für alle notwendigen Datentypen (Office2007, PDF-1.5, etc.). Weiterhin sind zur Konfiguration Strukturen (sog. Zones) definiert worden, die alle notwendigen Funktionen übersichtlich abbilden.

Zur Konfiguration des Lucene-Index kann einfach die Zone localhost vollständig kopiert und umbenannt werden. Anschließend sind noch zwei Dateien manuell anzupassen:

urls/url
Konfiguration der Start-URLs
Hier ist eine URL einzutragen, von der aus über die Verknüpfungen die gesamte Webseite erreicht werden kann. Damit hat die Konfigurationsdatei etwa den folgenden Inhalt:
http://somedomain.com/index.php
conf/urlfilter.txt
Konfiguration der globalen URL-Regeln
Hier muss die mind. die folgende Zeile angepasst werden:
+^http://([a-z0-9]*\.)*localhost/

Gestartet wird der Crawler über das Skript crawl-zone.sh. Der Aufruf erfolgt etwa wie folgt:

/srv/sitepark/nutch/crawl-zone.sh localhost -d 5 -vv

Wobei der erste Parameter (localhost) die Zone bestimmt, der zweite Parameter (-d für depth) die Anzahl der Linktiefe und der dritte Parameter (v, vv, vvv) den Debug-Level. Optional kann noch ein Parameter -f angefügt werden, um einen nicht interaktiven Aufruf zu starten.

Bricht das Skript ab, so wird der alte Index nicht gelöscht. Ein anderes Skript crawl-all-zones.sh kann angepasst werden um einen Cronjob über unterschiedliche Crawls für mehrere Zones zu konfigurieren. U.u. kann die Konfiguration von $JAVA_HOME im Skript crawl-zone.sh erforderlich sein.

Häufig werden mehrere Indizes benötigt. Die einzelnen Aufrufe können dann in dem Script /srv/sitepark/nutch/crawl-all-zones.sh eingtragen werden.

Für die regelmäßige Aktualisierung der Indizes werden Cron-Jobs benötigt. Diese lauten etwa wie folgt:

# m h  dom mon dow   command

# jede Nacht nutch Suchindizes aktualisieren
15 2 * * * /srv/sitepark/nutch/crawl-all-zones.sh 2>/dev/null

Da die Indices vom Nutzer des Webserver gelesen werden müssen, muss diesem stets nach dem Crawlen der entsprechende Verzeichnis übertragen werden. Ist dieser Nutzer wwwrun in der Gruppe wwwrun sieht der Aufruf wie folgt aus:

chown -R wwwrun.wwwrun /srv/sitepark/nutch/zones

Idealerweise wird das an das Ende der Date crawl-all-zones.sh angehängt.

Installation der PHP-Zend-Suche

Zend ist ein PHP-Framework mit dem u.a. der Zugriff auf Lucene-Indices über PHP möglich ist: Zend Framework.

Eine aktuelle Version inkl. notwendiger Erweiterungen erhalten Sie direkt von Sitepark. Das Paket steht als IES-Modul zur Verfügung und kann über die Administrationsoberfläche in den IES eingespielt werden. Dadurch steht es in den einzelnen Publikationsbereichen bereits zur Verfügung. Für die Verwendung muss anschließend noch der der php include_path der Webseite (Virtual Host) erweitert werden. Dieses kann entweder in der /etc/php5/apache2/php.ini

...
php_value include_path ".:/srv/www/internet/WEB-IES/citygov/php/:/srv/www/internet/WEB-IES/ies-api/php/:/srv/www/internet/WEB-IES/zend/"
 
# Mit Infoticket und Form-Service beispielsweise für CityCall115 müssen noch weitere Pfade angehangen werden:
php_value include_path ".:/srv/www/internet/WEB-IES/citygov/php/:/srv/www/internet/WEB-IES/ies-api/php/:/srv/www/internet/WEB-IES/zend/:/srv/www/servicecenter/WEB-IES/formservice/php/:/srv/www/servicecenter/WEB-IES/infoticket/php/"

...

beziehungsweise innerhalb der VirtualHosts Konfiguration

...
php_value include_path ".::/srv/www/internet/WEB-IES/zend/:/srv/www/internet/WEB-IES/ies-api/php/:/srv/www/internet/WEB-IES/citygov/php/"
...

oder in der jeweiligen php Seite geschehen

...
set_include_path("/srv/www/internet/WEB-IES/zend/:/srv/www/internet/WEB-IES/ies-api/php/:/srv/www/internet/WEB-IES/citygov/php/" . PATH_SEPARATOR . get_include_path());
...

geschehen.

In den php Seiten, in denen Zend-Klassen verwendet werden, sollte der 'AutoLoader' einmal geladen werden. Anschließend können alle weiteren Zend-Klassen direkt (ohne require) verwendet werden. (Zur Info: Der Loader ersetzt die '_' in den Klassennamen durch ein '/' und findet so die entsprechende php Seiten in dem Zend-Verzeichnis.)

// Initialisierung
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance();

// Öffnen des Indizes
$index = Zend_Search_Lucene::open('/srv/sitepark/nutch/zone/internet/index/index');

// Abfrage
$hits = $index->find($query);

// Auflistung der Suchergebnisse
foreach ($hits as $hit) {
    echo $hit->score;
    echo $hit->title;
    echo $hit->author;
}

Weitere Informationen zur Abfragesyntax finden sie hier

Installation der Suche über die Tomcat-Webapplikation

Diese Form der Suche wird von Sitepark nicht mehr favorisiert. Stattdessen sollte die Suche besser über PHP-Zend (s.o.) realisiert werden.

Zur Installation der Webapplikation wird der Tomcat benötigt. Sitepark liefert eine Datei sitepark-nutch-0.8.1.war, die als nutch.war in den Webapps-Ordner von Tomcat zu kopieren ist. Ist auf dem Server der Ordner /etc/sitepark/ verfügbar, so ist die Konfiguration bereits abgeschlossen, da die Applikation notwendige Konfigurationen selbstständig liest. Ist der Tomcat auf einem anderen Server installiert, so ist im conf-Ordner vom Tomcat noch ein Datei sitepark.properties mit folgendem Inhalt

sitepark.home=/srv/sitepark/

erforderlich.

Für den Aufruf der Suche (/nutch/search.jsp) ist zum einen die Konfiguration eines entsprechenden Redirects (mod_proxy o.ä.) und zum anderen ein Suchartikel mit Formular notwendig. Für diesen Suchartikel gibt es Template-Vorlagen von Sitepark. Bitte sprechen Sie uns bei Bedarf an.

Läuft der Tomcat-Prozess auf dem gleichen Server, wie der IES, so muss der Tomcat entsprechend für andere Ports konfiguriert werden. I.d.R. setzen wir für 8080 den Wert 8180 und für 8009 den Wert 8109:

    <Connector port="8180" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

    <Connector port="8109" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" />

Wichtig ist die folgende Option im Connector-Tag:

URIEncoding="UTF-8"

Suche

Was wird indiziert

Der Index wird durch den Web-Crawler Nutch gefüllt, der alle Texte innerhalb der jeweiligen Webseite aufnimmt. Innerhalb der Webseiten können über bestimmte HTML-Kommentare Bereiche definiert, die nicht in den Index aufgenommen werden.

...
indizierter Text
<!--search_noindex-->
Text der nicht indiziert wird
<!--/search_noindex-->
...

Für die Ausgabe der einleitenden Texte bei der Auflistung der Suchergebnisse werden zwei Meta-Tags (s.u.) ausgewertet, die gemeinsam nacheinander in EIN Feld (sp_intro) in den Index aufgenommen werden. Bei PDF Dokumenten wird der erste Abschnitt des einleitende Textes in dieses Feld übernommen.

<meta name="sp_intro" content="Hier finden Sie Auskünfte und Ansprechpartner ..."/>
<meta name="description" content="Hier finden Sie Auskünfte und Ansprechpartner ..."/>


CityGov und CityCall

Zu den oben beschriebenen auskommentierten Bereichen gehören innerhalb von CityGov3 die Bereiche wie Unterlagen, Gebühren und Bearbeitungszeit usw.. Dadurch wird eine höhere Qualität der Ergebnisse erzielt (Beispiel: 'Ausweis' soll nicht alle Seiten liefern, die den Ausweis bei 'benötigte Unterlagen' enthalten).

Für das ServiceCenter hingegen werden die 'gelben Felder' in den Index aufgenommen, um diese speziellen Informationen abfragen zu können.

Zusätzlich werden bestimmte Felder in den Index aufgenommen, die bei der Suche separat abgefragt und in den Ergebnislisten ausgegeben werden können. Die Daten befinden sich, wie oben bereist beschreiben, innerhalb der Meta-Tags der HTML Dokumente:

Feldname Beschreibung
sp_intro Einleitungstext aus dem CMS
sp_vv_objecttype Typ der Seite: [peron,product,organisation,office,department,theme]
sp_vv_name Titel bzw. Name der Seite
sp_vv_startletter Anfangsbuchstaben des Titels (für die A-Z Suche)
sp_vv_synonym Synonyme des Elementes

Folgende Felder stehen nur bei Peronendatensätzen zur Verfügung

Feldname Beschreibung
sp_vv_firstname Vorname
sp_vv_lastname Nachname
sp_vv_phone Telefonnummer(n)
sp_vv_fax Faxnummer
sp_vv_email E-Mail Adresse, wenn der Publikationbereich als 'intern' konfiguriert ist
sp_vv_cryptedemail DES gecryptete E-Mail Adresse. Kann an Kontaktformulare übergeben werden.
sp_vv_address Adresse
sp_vv_product Liste der verknüpften Produkt-Titel/Namen
sp_vv_productsynonym Liste der Synonyme der verknüpften Produkte
sp_vv_organisation Liste der verknüpften Organisations-Titel/Namen
sp_vv_organisationsynonym Liste der Synonyme der verknüpften Organisationen

Wie wird gesucht

Neben dem eben beschriebenen Volltext der Webseiten wird die Abfrage innerhalb der CityGov3-Ausgaben auch auf die hinterlegten Synonyme abgesetzt.

Der eingegebene Suchtext wird über den Ausdruck [\s \/!:`;\\-+#,'\"] in einzelne Token zerlegt. Jeder dieser Token wird als WildCard mit einem '*' am Ende des Tokens gewertet. Die einzelnen Token werden schließlich 'AND' verknüpft und an die Suchmaschine übergeben.

Innerhalb der Telefonbuchsuchen wird dieses Verfahren auch auf den einzelnen Felder einer Suche angewandt (Produkte/Organisation/...)

Folgende Tabelle verdeutlicht, welche Seiten in Abhängigkeit ihres Inhalts und den eingegebenen Suchtext bei der Suche gefunden werden.

Text der Seite: Suche: Angepasst: Ergebnis:
102.204 10 10* ja
102.20 102.20* ja
20 20* nein
test@sitepark.de test@si test@si* ja
sitep sitep* nein
müller-schmidt müll müll* ja
müll schmidt müll* & schmidt* ja
schmi schmi* ja