Nextcloud unterstützt eine Suche über die Weboberfläche und in den Clients. Dabei werden aber nur Dateinamen verglichen und nicht in Dateinhalten gesucht. Es gibt aber die Möglichkeit, eine Volltextsuche einzurichten.
Installation von Elasticsearch unter Ubuntu/Debian
Java Laufzeitumgebung
Die Volltextsuche von Nextcloud baut auf Elasticsearch auf, was unabhängig davon installiert werden muss. Elasticsearch ist eine Java-basierte Suchmaschine, weshalb zunächst sichergestellt sein muss, dass Java verfügbar ist. Mit dem folgenden Befehl kann man prüfen, ob Java bereits installiert ist:
java -version
Als Ergebnis sollte eine Ausgabe ähnlich wie dieser hier erscheinen:
openjdk version "11.0.13" 2021-10-19 OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.18.04) OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)
Falls statt dessen eine Meldung wie Command 'java' not found
ausgegeben wird, muss eine Java-Laufzeitumgebung noch installiert werden, z.B. unter Ubuntu Linux wie folgt:
apt install openjdk-11-jre
Elasticsearch installieren
Danach kann das Repository für Elasticsearch wie folgt hinzufügen und Elastisearch installieren:
apt install apt-transport-https ca-certificates wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elasticsearch7.list apt update apt install elasticsearch -y
Bevor man Elasticsearch startet, sollte man unbedingt die Konfiguration anpassen, um die Größe des Heaps zu begrenzen – anderenfalls kann es passieren, dass Elasticsearch den gesamten freien Arbeitsspeicher belegt und andere Dienste beeinträchtigt werden.
Dazu habe ich in der Datei /etc/default/elasticsearch
folgenden Eintrag ergänzt, um die Größe des Heap auf 4 GB festzulegen:
ES_JAVA_OPTS="-Xms4g -Xmx4g"
Hinweis dazu: der verwendete Server verfügt über 32 GB RAM. Ggf. muss man den Wert nach unten hin anpassen, wenn nicht so viel Arbeitsspeicher zur Verfügung steht. Je mehr Speicher nutzbar ist, desto effektiver kann Elasticsearch arbeiten, da dann weniger Daten im laufenden Betrieb nachgeladen werden müssen.
In manchen Anleitungen wird außerdem noch darauf hingewiesen, dass man in der Datei /etc/elasticsearch/elasticsearch.yml
die IP-Adresse für eingehende Verbindungen auf 127.0.0.1
festlegen sollte. Das ist für Elasticsearch 7 allerdings nicht notwendig, da Elasticsearch ohne Angabe einer IP-Adresse ohnehin nur lokal ansprechbar ist. Zur Sicherheit sollte man die Einstellung zumindest prüfen und ggf. network.host
auskommentieren oder auf 127.0.0.1
setzen:
# ---------------------------------- Network ----------------------------------- # # By default Elasticsearch is only accessible on localhost. Set a different # address here to expose this node on the network: # #network.host: 192.168.0.1
Um auch den Inhalt von PDF-Dokumenten durchsuchen zu können, muss ein zusätzliches Plugin installiert werden:
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment
Tesseract für OCR
Neben Textdokumten kann man auch Bilder nach lesbarem Text durchsuchen lassen. Dazu wird das Tool „Tesseract“ benötigt, was man wie folgt mit der Unterstützung für Deutsch und Englisch installieren kann:
apt install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng
Wichtig: OCR ist ein zeitintensiver Prozess. Wenn man sehr viele Bilder in seiner Nextcloud hat, wird der erste Aufbau des Suchindex entsprechend lange dauern!
Elasticsearch als Dienst einrichten
Nachdem alle Vorbereitungen abgeschlossen sind, kann man Elasticsearch wie folgt als Dienst aktivieren:
systemctl daemon-reload systemctl enable elasticsearch systemctl start elasticsearch
Der Start kann eine Weile dauern, in meinem Fall waren es etwa 20 Sekunden.
Nun steht Elasticsearch für die Volltextsuche in Textdokumenten einschließlich PDF und Office-Dokumenten wie Word und LibreOffice/OpenOffice zur Verfügung.
Einrichten der Volltextsuche in Nextcloud
Nachdem Elasticsearch und ggf. Tesseract installiert sind, installiert man in Nextcloud folgende Apps:
Sowie folgende App, wenn man Tesseract für die Textsuche in Bildern nutzen möchte:
Konfiguration der Volltextsuche
Die Konfiguration erreicht man über die Administration. Darin sind die folgenden Angaben zu ergänzen.
Im Abschnitt „Elasticsearch“
- Addresse des Servlets:
http://localhost:9200
- Index: Name des Index, z.B. der Domainname der eigenen Nextcloud
- Analyzer tokenizer:
standard
Eine Änderung des Tokenizer ist normalerweise nicht nötig. Welche es gibt und wie diese sich verhalten, findet man in der Dokumentation bei Elasticsearch.
Im Abschnitt „Dateien“
Hier wird kann man die Aufnahme von PDF- und Office-Dokumenten in den Index aktivieren und ggf. die maximale Dateigröße anpassen, bis zur Dokumente in den Index aufgenommen werden.
Im Abschnitt „Files – Tesseract OCR“
Sofern man auch Tesseract verwendet, kann man hier OCR grundsätzlich aktivieren. Bei den Sprachen trägt man alle Sprachen ein, die man für Tesseract installiert hat, getrennt durch ein Komma – z.B. eng,deu
.
Verzeichnisse aus der Suche ausschließen
Wenn man einzelne Verzeichnisse aus der Suche ausschließen möchte, kann man dazu die Datei .noindex
im Verzeichnis anlegen. Siehe dazu auch https://help.nextcloud.com/t/how-to-exclude-a-folder-from-indexing/35318/2.
Aufbau des Suchindex
Der erste Aufbau des Suchindex erfolgt in einer Konsole mit folgendem Befehl im Hauptverzeichnis von Nextcloud:
php occ fulltextsearch:index
Dieser Vorgang kann je nach Umfang des vorhandenen Datenbestandes auch mehrere Stunden dauern. Wenn man per SSH auf den Server zugreift, ist es daher sinnvoll, Tools wie screen oder tmux zu verwenden, damit man das Kommando im Hintergrund laufen lassen kann, ohne die Verbindung zum Server durchgehend aufrecht erhalten zu müssen.
Aktivieren von Cron in Nextcloud
Wenn der Vorgang abgeschlossen ist, werden künftig neue Dateien oder Dateiänderungen automatisch im Rahmen des Cron-Jobs von Nextcloud in den Index aufgenommen. Dazu muss dieser aber auch über cron laufen – AJAX oder Webcron reicht dazu nicht aus!
Zur Einrichtung von Cron siehe auch die Dokumentation von Nextcloud.
Test der Suche
Nach der Einrichtung und dem Aufbau des Suchindex kann man die Suche testen, indem man das Such-Symbol in der Weboberfläche anklickt und einen Begriff eingibt, von dem man weiß, dass er in den eigenen Dokumenten vorkommt.
In der Ergebnisliste sollte dann einer oder mehrere Einträge unter „Volltextsuche“ erscheinen:
Im Android-Client wird die Volltextsuche dann ebenfalls unterstützt:
PDF-Plugin bei Updates von Elasticsearch aktualisieren
Elasticsearch wird im Rahmen von regulären Updates mit apt update
und apt upgrade
ebenfalls aktualisiert. Dabei kann es vorkommen, dass nach dem Update der Dienst nicht mehr nutzbar ist, weil das Plugin für den PDF-Import nicht mehr zur Serverversion passt.
In diesem Fall muss man das Plugin einmal entfernen und neu installieren:
/usr/share/elasticsearch/bin/elasticsearch-plugin remove ingest-attachment /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment
Danach kann man Elasticsearch neu starten:
systemctl restart elasticsearch
Nutzung mit Nextcloud 25
Aktuell (Stand Mitte Oktober 2022) sind die Apps für die Volltextsuche noch nicht als kompatibel zu Nextcloud 25 gekennzeichnet. Nach meiner Erfahrung funktioniert es aber problemlos, wenn man die entsprechenden Apps manuell freigibt und dann aktiviert.
Schöner Blogeintrag. Leider lässt sich aktuell mit der NC 25 bzw. NC Hub 3 die Volltextsuche noch nicht benutzen. Vielleicht wäre das noch eine Info wert.
Ja, dass die entsprechenden Apps für NC 25 aktuell noch nicht offiziell freigegeben sind, ist mir bekannt. Funktionieren tun sie aber trotzdem, wenn man sie manuell freischaltet und danach aktiviert.
Hallo Arno,
besten Dank für das tolle Tutorial. eine Frage bleibt bei mir noch offen:
Welchen Eintrag (konkret) empfiehlst Du in der Crontab?
Besten Dank aus Ostfriesland …
Hans Gabriel
Ich verstehe die Frage nicht so ganz. Für die Volltextsuche muss man keinen speziellen Crontab-Eintrag einfügen. Die Aktualisierung erfolgt im Rahmen der regulären Job-Ausführung von Nextcloud. Siehe dazu auch: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html