Drupal Suche optimieren Apache Solr mit Debian Lenny einrichten
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 DrupalConcept 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:
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:
javac -version
Wird nach Eingabe des obigen Befehls nicht zweimal Version 6 angezeigt, kann man die Version mit folgenden Befehlen festlegen:
update-alternatives --config javac
Nun wird noch Tomcat installiert:
Nun muss die Datei /etc/default/tomcat5.5 bearbeitet und die Zeile
durch folgende Zeile ersetzt werden:
Unsere Empfehlung
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:
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
mit folgender Zeile ersetzt:
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:
<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
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
mit
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:
Falls man die Installation auf einen Server installiert hat (und nicht direkt an diesen Rechner arbeitet), verwendet man den Hostnamen in der URL:
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:
curl -s http://localhost:8180/solr/ | grep 'Welcome to Solr!'
Das sollte folgendes Ergebnis anzeigen:
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:
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):
Nun das Verzeichnis ins apachesolr Drupal Modul Verzeichnis verschieben:
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/solrconfig.xml /www/solr/conf/solrconfig.xml
Damit Solr mit deutschen Stopwords arbeitet, muss man noch die stopwords.txt im solr/conf Verzeichnis überschreiben:
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.







Schreib doch was dazu