Apache Solr ist eine auf der Lucene Java-Suchbibliothek aufbauende Suchmaschine mit Programmierschnittstellen für JSON, XML, PHP, Python und Ruby. Der Solr Server läuft in einem Java Servlet-Container, hier wird dazu Tomcat verwendet (alternativen wären Jetty, Glassfish oder Resin).
Es folgt eine Liste der wichtigsten Funktionen, die über Solr bereitgestellt werden:
- Volltextsuche
- Ranking und Relevanz
- Highlighting
- Facetten / Faceted Search (z.B. Kategorien, Datum, Preise)
- Stammwörter (z.B. Buch / Bücher)
- Rechtschreibkorrektur
- Filterung mit regulären Ausdrücken, phonetische Filter
- Vorschläge: “Meinen Sie…?”
- Unterstützung von Synonyme und STOP-Wortlisten
- Auto-Vervollständigung
- Vorschläge für ähnliche Treffer
- Indizierung von Rich-Dokument-Formate, wie Word oder PDF
- schnell, wirklich schnell!
- Skalierbar durch verteile Indizes
- Replikation (Master / Slave)
- Monitoring, Logging von Suchanfragen
- Einfache Erweiterbarkeit
oder kurz gesagt im Vergleich zur integrierten Drupal-Suche: bessere Suchergebnisse, bessere Performance und State-of-the-Art Features
Diese Anleitung zeigt auf, wie man Apache Solr installiert und einrichtet, damit man diese Installation für den Einsatz von Drupal benutzen kann. Die Beschreibung bezieht sich auf Debian Lenny.
Was erhalten wir mit dieser Anleitung:
- eine Solr Server Instanz auf dem eigenen Server
- Solr ist so konfiguriert, dass es mit Drupal genutzt werden kann
- Drupal ist für die Nutzung mit Solr konfiguriert
Folgende Entscheidung muss man vor der Installation treffen:
- Zugriff auf einen externen Service Wenn man auf einen eigenen Solr Server verzichten will, kann man auch auf kommerzielle Dienste zurückgreifen. Entscheidet man sich für acquia search, reicht es aus, wenn man innerhalb Drupal die Konfiguration vornimmt (siehe dazu Drupal Modul Konfiguration apachesolr). Auch Hosting Anbieter wie freistilbox bieten Solr als Bestandteil oder Erweiterung der angebotenen Hosting-Pakete an.
Vorteile:
- kein Server Kenntnisse erforderlich
- Automatische Skalierung
Nachteile:
- Datensicherheit (der Suchindex liegt nicht auf den eigenen Server)
zusätzliche Kosten (hier ist zu überprüfen, ob die Kosten wirklich über den eines eigenen Solr Servers liegen)
- Einrichtung einer Solr Instanz auf dem gleichen Server wie der Webserver Für dieser Entscheidung ist diese Anleitung geschrieben.
Vorteile:
- Sicherheitsrisiko gering
- Nur ein Server erforderlich für Webserver und Solr
- keine Latenz-Probleme
- keine Bandweiten-Probleme
- geringe Kosten
Nachteile:
schlechte Skalierung
Einrichtung einer Solr Instanz auf dedizierten Server Für dieser Entscheidung ist diese Anleitung geschrieben.
Vorteile:
- gute Skalierung (die Last wird vom Webserver genommen und auf einer eigenen Server Instanz verlagert; hier kann anstelle einer einzelnen Server Instanz auch ein Server Cluster zum Einsatz kommen)
Nachteile:
- Sicherheitsrisiko (Sicherheitsvorkehrungen müssen getroffen werden, da eine externe Verbindung zum Solr Server erforderlich ist und Solr keine eigenen sicherheitsrelevanten Mechanismen anbietet)
- zusätzliche Kosten (ein weiterer Server kostet Geld und Traffic)
- Bandweiten-Probleme, da Kommunikation über das Netzwerk statt findet (dieser Punkt ist aber zu vernachlässigen, da verschwindend gering)
- Latenz-Probleme können durch die Netzwerkabhängigkeit auftreten
Was wird benötigt den Einsatz mit Drupal:
- Java 1.6 oder neuer
- Tomcat 5.5 oder neuer
- Apache Solr 1.4.0 oder neuer
- PHP Solr Client
- Drupal Modul apachesolr
1. Java und Tomcat installieren
Java und Tomcat stellt das Debian Lenny Repository bereit.
Java JRE und JDK werden mit folgendem Befehl installiert:
aptitude install sun-java6-jre sun-java6-jdk
Nun sollte man noch testen, ob auch wirklich die richtige Java Version aktiv ist (falls mehrere Version auf dem System installiert sind). Dazu gibt man folgenden Befehl ein:
java -version
javac -version
Wird nach Eingabe des obigen Befehls nicht zweimal Version 6 angezeigt, kann man die Version mit folgenden Befehlen festlegen:
update-alternatives --config java
update-alternatives --config javac
Nun wird noch Tomcat installiert:
aptitude install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps
Nun muss die Datei /etc/default/tomcat5.5 bearbeitet und die Zeile
#JAVA_HOME=/usr/lib/jvm/java-6-sun
durch folgende Zeile ersetzt werden:
JAVA_HOME=/usr/lib/jvm/java-6-sun
2. Apache Solr installieren
2. 1 Installation
Um Apache Solr Version 1.4 zu installieren, holen wir die Archivdatei vom Anbieter, entpackt diese und verschiebt die Verzeichnisse wie folgt:
cd /tmp
wget http://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist//lucene/solr/1.4.1/apache-solr-1.4.1.tgz
tar xvzf apache-solr-1.4.1.tgz
mv apache-solr-1.4.1/example/solr /www/
mv apache-solr-1.4.1/dist/apache-solr-1.4.1.war /www/solr/solr.war
chown -R tomcat55:root /www/solr/
chmod +x /www/solr/solr.war
rm /tmp/apache-solr-1.4.1.tgz
rm -r /tmp/apache-solr-1.4.1
2.2 Konfiguration
2.2.1 /etc/default/tomcat5.5 Konfiguration
In der Datei /etc/default/tomcat5.5 wird der Java Security Manager deaktiviert, indem man die Zeile
#TOMCAT5_SECURITY=yes
mit folgender Zeile ersetzt:
TOMCAT5_SECURITY=no
2.2.2 tomcat-users.xml Konfiguration
Um für das Webinterface zu Solr und dem Tomcat Administrationsbereich die Zugangsdaten festzulegen, setzt man folgenden Inhalt in die Datei /etc/tomcat5.5/tomcat-users.xml:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="alex" password="geheim" fullName="Dein Name" roles="admin,manager"/>
</tomcat-users>
Hier wird der Benutzer ‘alex’ mit dem Kennwort ‘geheim’ namens ‘Dein Name’ festgelegt. Diese Werte müssen natürlich entsprechend angepasst werden.
2.2.3 solr.xml Konfiguration
Nun binden wir Solr in Tomcat ein, indem wir die Datei “/etc/tomcat5.5/Catalina/localhost/solr.xml” mit folgenden Angaben erstellen:
<!--
Context configuration file for the Solr Web App
-->
<Context docBase="/www/solr/solr.war" debug="0" privileged="true" allowLinking="true" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/www/solr" override="true" />
</Context>
2.2.4 server.xml Konfiguration
Jetzt wird noch das Encoding auf UTF-8 umgestellt und die Zugriffsberechtigung auf localhost gesetzt. Dazu ersetzt man in der Datei /etc/tomcat5.5/server.xml den Abschnitt
<Connector port="8180" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
mit
<Connector port="8180" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
address="127.0.0.1" URIEncoding="UTF-8" />
Die Festlegung der Nutzung von UTF-8 ist wichtig, damit keine Probleme mit Umlauten entstehen (z.B. wenn verschiedene Betriebssysteme zum Einsatz kommen)
Wenn der Solr Server nicht auf dem selben Server installiert ist, wie der Webserver (also nicht localhost), dann muss bei address die IP Adresse des Webservers angegeben werden. Sofern man keine Sicherheitseinschränkung über Tomcat verwenden will, lässt man address=”127.0.0.1” einfach weg. Gründe die für einen Verzicht sprechen:
- es eine Firewall eingesetzt, über die der Zugriff gesteuert wird
- Zugriff auf das Admin Webinterface von Solr über die URL /solr/admin
2.3 Test der Funktionalität
Nun testen wir, ob soweit alles wie benötigt funktioniert.
2.3.1 Über den Webbrowser
Sofern keine IP-Adressen-Beschränkung eingerichtet wurde (siehe Kapitel 2.2), kann die Überprüfung über den Webbrowser erfolgen. Sofern eine IP-Adressen-Beschränkung verwendet wird, muss man den Test vornehmen, wie in Kapitel 2.3.2 beschrieben.
Prüfen, ob Tomcat korrekt installiert wurde indem man im Browser die folgende Seite aufruft:
Hat man Solr auf den lokalen Rechner installiert:
http://localhost:8180/solr/admin
Falls man die Installation auf einen Server installiert hat (und nicht direkt an diesen Rechner arbeitet), verwendet man den Hostnamen in der URL:
http://MEINE-DOMAIN.DE:8180/solr/admin
MEINE-DOMAIN.DE muss mit dem entsprechenden Namen ersetzt werden.
2.3.2 Über die Konsole
Wenn Solr auf die lokale IP-Adresse beschränkt wurde, kann man die Überprüfung über die Konsole wie folgt durchführen:
aptitude install curl # curl installieren, falls noch nicht vorhanden
curl -s http://localhost:8180/solr/ | grep 'Welcome to Solr!'
Das sollte folgendes Ergebnis anzeigen:
<h1>Welcome to Solr!</h1>
Falls als Ergebnis nicht zu sehen ist, ist etwas schief gelaufen. Bevor weitere Schritte der Anleitung gemacht werden, muss der Fehler behoben werden.
3. Drupal apachesolr Modul Installation
3.1 Modul Installation
Um Apache Solr mit Drupal nutzen zu können, wir das Drupal Modul apachesolr benötigt (das Modul heißt zwar genauso wie der Dienst Apache Solr, es ist aber nicht selbst der Dienst, sondern nur die Schnittstelle dazu).
Die Installation führt man wie bei jedem anderen Drupal Modul durch, z.B. mit Drush:
drush dl apachesolr
3.2 PHP Solr Client installieren
Das Drupal Modul benötigt die Solr PHP Client library.
Mit SVN die Bibliothek beziehen (falls SVN nicht installiert ist oder verwendet werden soll, kann man sie auch manuell herunterladen):
svn checkout -r22 http://solr-php-client.googlecode.com/svn/trunk/ /tmp/SolrPhpClient
Nun das Verzeichnis ins apachesolr Drupal Modul Verzeichnis verschieben:
mv /tmp/SolrPhpClient DRUPAL/sites/all/modules/apachesolr
DRUPAL muss hier mit dem Pfad zum Drupal Hauptverzeichnis ersetzt werden.
3.3 Apache Solr Drupal Konfiguration
Das Drupal Modul apachesolr kommt mit zwei Konfigurationsdateien, die für die Konfiguration des Dienstes Apache Solr verwendet werden. Dazu kopiert man diese Dateien in das Apache Solr Verzeichnis:
cp DRUPAL/sites/all/modules/apachesolr/schema.xml /www/solr/conf/schema.xml
cp DRUPAL/sites/all/modules/apachesolr/solrconfig.xml /www/solr/conf/solrconfig.xml
Damit Solr mit deutschen Stopwords arbeitet, muss man noch die stopwords.txt im solr/conf Verzeichnis überschreiben:
cd /tmp
wget http://svn.apache.org/repos/asf/lucene/dev/trunk/modules/analysis/common/src/resources/org/apache/lucene/analysis/snowball/german_stop.txt
mv german_stop.txt /www/solr/conf/stopwords.txt
3.4 Drupal Konfiguration
Nachdem man das Modul apachesolr aktiviert hat, stellt man unter der URL /admin/settings/apachesolr die Verbindungsparameter ein. Entsprechend der Konfiguration zur Solr Server Instanz müssen hier die Werte angepasst werden:
Solr Hostname: localhost Solr Port: 8180 Solr Path: /solr
Der Index wird durch den Drupal Cron aufgebaut bzw. aktualisiert. Bevor Suchergebnisse gefunden werden, muss also der Cron ausgeführt worden sein.