Drupals Suche durch Apache Solr Search verbessern

Drupals Suche durch Apache Solr Search verbessern

Die Core-Suchfunktion von Drupal ist nicht gerade eine der Stärken dieses ansonsten gelungenen CMS. Und so gibt es zahlreiche Module, um diese wichtige Funktion aufzupeppen. Wer die Suchfunktion jedoch grundsätzlich verbessern will, sollte sich Apache Solr anschauen. Mittlerweile ist die Installation auf dem eigenen Server nicht mehr so schwierig und es stehen mehrere Drupal-Module zur Verfügung, um einen Apache Solr Server in Drupal zu integrierem und diesem die Indizierung der Inhalte anzuvertrauen.

Wie das geht, zeigen wir in diesem Beitrag am Beispiel von Apache Solr 4.10..4 und dem Drupal-Modul Apache Solr Search.

Voraussetzung ist, dass man einen SSH-Zugang zu seinem Server hat.

Schritt 1: Zunächst loggt man sich per SSH auf seinem Server ein und lädt die neueste Version 4 von Solr herunter (es gibt auch eine Version 5, aber die haben wir nicht getestet, daher basiert diese Anleitung auf der Version 4) mit

<code>wget http://apache.org/lucene/solr/4.10.4/solr-4.10.4.tgz</code>

Anschließend entpackt man dieses Tar-File

mit

<code>tar -xvzf solr-4.10.4-src.tgz</code>

Hinweis: Das Verzeichnis, in das Solr entpackt wurde, sollte aus Sicherheitsgründen außerhalb des Document-Root-Verzeichnisses des Webservers liegen und damit natürlich auch außerhalb des Drupal-Verzeichnisses.

Unser Solr liegt jetzt im Verzeichnis ~/solr-4.10.4

Das überflüssige tar-Archiv kann man nun löschen:

<code>rm solr-4.10.4-src.tgz</code>

Schritt 2: Jetzt installiert man das Drupal-Modul Apache Solr Search entweder per Drush oder über das Admin-Backend von Drupal und aktiviert es wie gewohnt.

Schritt 3: Als nächstes müssen einige Konfigurationsdateien von Solr durch die im Drupal-Modul mitgelieferten ersetzt werden. Wir wollen mit dem im Solr-Paket mitgelieferten Beispiel arbeiten. Dieses befindet sich im Verzeichnis ~/solr-4.10.4/example. Im Unterverzeichnis ~/solr-4.10.4/example/solr/collection1/conf benennen wir zunächst drei Dateien um:

<br />
mv protwords.txt protwords.bak<br />
mv schema.xml schema.bakr ja fast noch zu kühl&nbsp;<br />
mv solrconfig.xml solrconfig.bak

Jetzt müssen  wir die Dateien protwords.txt, schema.xml und solrconfig.xml aus dem Modulverzeichnis hierher kopieren. Für die Version 4 von Solr benötigen wir die Dateien aus dem Verzeichnis ~/www/sites/all/modules/apachesolr/solr-conf/solr-4.x (~/www ist in diesem Beispiel das Root-Verzeichnis unseres Webservers in dem unser Drupal liegt)

[code
]cd ~/www/sites/all/modules/apachesolr/solr-conf/solr-4.x
cp protwords.txt ~/solr-4.10.4/example/solr/collection1/conf
cp schema.xml ~/solr-4.10.4/example/solr/collection1/conf
cp solrconfig.sml ~/solr-4.10.4/example/solr/collection1/conf[/code]

Anschließend prüfen wir noch, ob alle für den Start notwendigen Dateien in unserem Beispiel vorhanden sind. Dazu wechseln wir zu

cd ~/solr-4.10.4/example/solr/collection1/conf

Dort sollten folgende Dateien liegen:

solrconfig.xml
schema.xml
elevate.xml
mapping-ISOLatin1Accent.txt
protwords.txt
stopwords.txt
synonyms.txt

(und natürlich unsere drei .bak-Dateien). Wenn alles da ist wechseln wir in das Verzeichnis ~/solr-4.10.4/example

Schritt 4: Nun können wir Solr starten. Dazu geben wir auf der Kommandozeile

java -jar start.jar

ein. Es wird eine längere Liste von Statusmeldungen ausgegeben, die am Ende so aussehen sollte:

3915 [main] INFO&nbsp; org.apache.solr.servlet.SolrDispatchFilter&nbsp; â SolrDispatchFilter.init() done<br />
3934 [main] INFO&nbsp; org.eclipse.jetty.server.AbstractConnector&nbsp; â Started SocketConnector@0.0.0.0:8983<br />
3947 [searcherExecutor-6-thread-1] INFO&nbsp; org.apache.solr.core.SolrCore&nbsp; â [collection1] webapp=null path=null params={start=0&amp;event=firstSearcher&amp;q=solr+rocks&amp;distrib=false&amp;rows=10} hits=0 status=0 QTime=34<br />
3948 [searcherExecutor-6-thread-1] INFO&nbsp; org.apache.solr.core.SolrCore&nbsp; â QuerySenderListener done.<br />
3948 [searcherExecutor-6-thread-1] INFO&nbsp; org.apache.solr.handler.component.SpellCheckComponent&nbsp; â Loading spell index for spellchecker: default<br />
3952 [searcherExecutor-6-thread-1] INFO&nbsp; org.apache.solr.core.SolrCore&nbsp; â [collection1] Registered new searcher Searcher@6b340157[collection1] main{StandardDirectoryReader(segments_5:12:nrt _3(4.10.4):C56)}

Hinweis:  Für Testzwecke genügt es, wenn man Apache über die SSH-Konsole startet. Für den späteren Betrieb sollte man unbedingt einen automatischen Start einrichten.

Schritt 5: Abschließend konfigurieren wir noch das Drupal Solr Search Modul, das wir in Schritt 2 installiert und aktiviert haben. Dazu gehen wir auf "Konfiguration >> Suche und Metadaten >> Apache solr search >> Einstellungen" und tragen dort die URL unseres eben gestarteten Solr-Servers ein. Da sich dieser in unserer Testumgebung auf dem gleichen virtuellen Server befindet, lautet die URL localhost:8983/solr (8983 ist der Standardport von Apache Solr).

Einstellungen des Apache Solr search Moduls von Drupal 7

Nach dem Eintragen der URL (die übrigen Einstellungen lassen wir unverändert) klicken wir einmal auf "Test connection". Wenn alles funktioniert, meldet Drupal uns jetzt "Your site has contacted the Apache Solr server."

Bevor die neue Suche funktioniert, muss der gesamte Content der Website einmal neu indiziert werden. Am einfachsten ist es, wenn man dies dem Cron-Job überlässt. Wer aber nicht so lange warten will, kann die Neuindizierung aber auch über "Konfiguration >> Suche und Metadaten >> Apache solr search >> Default Index" anstoßen. Dort klickt man einfach auf "Index queued content". Diese Seite bietet außerdem ausführliche Informationen über den Stand der Indizierung des Contents. Zusätzlich kann man dort einstellen, welche Inhaltstypen indiziert werden sollen. Noch ein Hinweis: Standardmäßig ist die Auto-Commit Funktion mit 2 Minuten Verzögerung eingeschaltet. Es dauert also etwas bis die Inhalte nach dem Cron-Lauf tatsächlich in Apache Solr verfügbar sind.

Als nächstes kann man mit den diversen Funktionen des Moduls experimentieren, z.B. mit der Facet Search oder Autokorrektur, die alternative Suchbegriffe vorschlägt (vergleichbar der "stattdessen suchen nach"-Funktion von Google). Oder man probiert die verschiedenen Zusatzmodule aus. Hier empfiehlt sich z.B. Apache Solr autocomplete, das während der Eingabe bereits Suchvorschläge generiert, ähnlich wie man es von Google kennt.

Viel Erfolg beim Ausprobieren!