Das ECM bietet die Möglichkeit für die Indizierung Ihrer Inhalte und Dokumente die Apache Lucene Bibliothek zu verwenden. Diese Indizierung bietet mehr Performance und Möglichkeiten bei der Suche und schont zudem Ihre Datenbank.
Die Lucene Bibliothek wird mit dem ECM geliefert. Um die Anbindung mit dem ECM nutzen zu können, sind Java und ein Java Application Server zu installieren.
Java in der Version 1.7 (ab EGOCMS 16.2.1 die Version 1.8) und Tomcat 7 sind Mindestvoraussetzung. Außerdem wird das PHP Modul CURL benötigt.
Die verwendete Lucene Version für ECM 14 ist 4.10 und ab EGOCMS 16 ist es 6.0.0.
Vorbereitung
Sind Java und Tomcat installiert, dann muss in das Tomcat webapps Verzeichnis ein symbolischer Link auf die Datei lib/lucene/ecmlucene.war gesetzt werden. Das webapps Verzeichnis bei einem Linux System finden Sie in /var/lib/tomcat7/webapps/. Sofern der Tomcat Server so eingerichtet ist, dass die Applikationen in diesem Verzeichnis automatisch deployed werden (Standardeinstellung), erstellt der Server automatisch die notwendigen Dateien und Verzeichnisse, die die Verwendung von Lucene und dem ECM ermöglichen.
ln -s /usr/share/nginx/html/lib/lucene/ecmlucene.war ecmlucene.war
Der symbolische Link ermöglicht das ECM auf neue Versionen zu aktualisieren und eventuelle Änderungen oder Erweiterungen an der Lucene Anbindung automatisch zu übernehmen. Sollten Sie einen Webserver verwenden, welcher keine symbolischen Links/Verknüpfungen unterstützt, müssen Sie die Datei lib/lucene/ecmlucene.war in das webapps Verzeichnis kopieren. In diesem Fall müssen Sie das nach jedem ECM Update wiederholen.
Nach einem Systemupdate müssen Sie Ihren Tomcat Server eventuell neu starten.
Konfiguration
Das ECM kommuniziert mit dem Tomcat Server über <HOST:PORT>/ecmlucene/json. Wenn Sie in Ihrem Browser <HOST:PORT>/ecmlucene/ aufrufen, sollten Sie bereits eine entsprechende Meldung erhalten, die Ihnen die korrekte Konfiguration bis hierher bestätigt.
In der Konfigurationsdatei des ECM (var/conf/conf.ini) wird nun folgender Wert erwartet (kann auch in den Globalen Einstellungen unter Verschiedenes > App Server-Zugriff eingestellt werden):
app_server_access = "<HOST:PORT>" (z.B. http://localhost:8080/)
Zudem muss die verwendete Search Engine umgestellt werden:
search_engine = "lucene"
Lucene hinterlegt den Suchindex standardmäßig in var/index/ (ausgehend von der Einstellung für var_dir). Möchten Sie diesen Index woanders hinterlegen, z.B. auf eine andere Partition, dann können Sie hier noch zusätzlich folgenden Wert setzen:
index_dir = "<INDEX_PATH>"
Das Verzeichnis, in welchem der Index hinterlegt wird, muss ausreichende Berechtigungen für den Tomcat Dienst haben.
Aus Performance Gründen erlaubt die Lucene Indizierung standardmäßig nicht nach Wörtern zu suchen, welche Bestandteil eines Wortes sind. Beispiel: Suchen Sie nach dem Wort Datei, werden Treffer, die den Begriff Konfigurationsdatei beinhalten, nicht gefunden. Sie können die Suche dennoch so einstellen, dass solche Fälle ebenfalls abgedeckt werden. Dazu müssen Sie folgenden Wert setzen:
search_leading_wildcard = 1
Indizierung
Nach der Vorbereitung und Konfiguration muss nun einmalig der komplette Index aufgebaut werden, bevor die Suche auch Ergebnisse liefern kann. Hierfür können Sie das ECM Skript bin/admin/su/update_search_index.php verwenden. Sie können einen Mandanten auswählen, für den der Index generiert werden soll. Optional können Sie dieses Skript auch mit folgendem Parameter aufrufen, um den Index für alle Mandanten zu generieren:
bin/admin/su/update_search_index.php?allsites=1
Suchanfrage
Die Lucene Suche bietet eine Vielzahl an Möglichkeiten um Ihre Ergebnisse zu verfeinern. Das ECM setzt automatisch bereits die Wildcard * am Ende und, falls eingestellt (search_leading_wildcard), am Anfang jedes Wortes Ihrer Suchanfrage. Nützliche Syntax könnte sein:
- ECM Lucene: Die Suche findet Ergebnisse mit den Wörtern ECM oder Lucene.
- +ECM +Lucene: Die Suche findet Ergebnisse mit den Wörtern ECM und Lucene.
- "ECM Lucene": Die Suche findet Ergebnisse mit der Zeichenfolge "ECM Lucene".
- -ECM Lucene: Die Suche findet Ergebnisse mit dem Wort Lucene, aber ohne dem Wort ECM.
- Die Wildcard * kann verwendet werden für eine beliebige Zeichenfolge.
- Die Wildcard ? kann verwendet werden für ein beliebiges Zeichen.
Weitere Möglichkeiten zur Syntax können Sie der Lucene Query Dokumentation entnehmen.
Globale Suche
Bei der Verwendung der Lucene Suche ergibt sich zudem eine bessere Möglichkeit um in mehreren Mandanten gleichzeitig zu suchen. Die Methode globalSearch sortiert hierbei auch automatisch alle Treffer nach ihrem Score.
require_once('base/Ego_Search_Factory.php');
$search = Ego_Search_Factory::start();
$results = $search->globalSearch('Suchbegriff', $sites);
In $sites wird eine Liste aller zu durchsuchenden Mandanten übergeben. Diese können jeweils ein Site Objekt oder auch nur der Name sein. Wird der Parameter nicht übergeben, werden alle Mandanten durchsucht. Weitere Parameter sind:
- query: Zusätzliches Query Array.
- param: Zusätzliche Parameter.
- sort: Bestimmte Sortierung (Array(field|extra, name, asc|desc)).
Sie können diese Methode auch in Smarty über {search} einsetzen.
{search term="Suchbegriff" sites=$sites}
Die weiteren Parameter query, param und sort werden ebenfalls unterstützt.