Nextcloud Volltextsuche mit Elasticsearch 8

turnserver

Diese Anleitung kann sowohl für Debian 12 -, als auch für Ubuntu 22 – Server (64Bit) angewandt werden. Wir empfehlen Ihnen, die Entwicklung des genutzten RAMs und Plattenplatz zu überwachen, da beides durch den Einsatz der Elasticsearch Volltextsuche stärker belastet werden.

  1. Installation Elasticsearch
  2. Installation der Nextcloud-Apps
  3. Optional: Einrichtung Nextcloud-Service
  4. Anpassung der JVM-Parameter

1. Installation Elasticsearch

Starten wir mit der Aktualisierung des Systems.

sudo -s
apt update && apt upgrade -V

und binden dann die Paketquellen von Elasticsearch ein. Bitte wählen Sie entsprechend Ihres Systems die Quellen von Ubuntu o. Debian:

wget -O - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /etc/apt/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

Die Installation beginnt:

apt update
apt install elasticsearch

Zum Ende der Installation werden Ihnen sowohl die Credentials des elasticsearch-Benutzers, als auch die notwendigen Befehle zur Inbetriebnahme des Elasticsearch-Services dargestellt.

Notieren Sie sich die Credentials (bspw. KeePass) und starten den Service

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service

Im Anschluss sollte der Service gestartet sein (active (running)):

systemctl status elasticsearch.service

In unserem Szenario wird Elasticsearch auf dem Nextcloudserver betrieben, weshalb Sie folgende Einstellungen vornehmen sollten:

nano /etc/elasticsearch/elasticsearch.yml

Ändern Sie die Zeile

#network.host: 192.168.0.1

in

network.host: 127.0.0.1

sowie die Zeile

xpack.security.enabled: true

in

xpack.security.enabled: false

Starten Sie den Dienst neu und überprüfen den Zustand des Services erneut.

systemctl restart elasticsearch.service
systemctl status elasticsearch.service

Um bspw. auch PDF Dateien in die Volltextsuche einbeziehen zu können wird Teseract benötigt. Wir installieren das Modul wie folgt:

apt install -y tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng

Nutzen Sie die Nextcloud Collectives-App, so stellen Sie sicher, dass die notwendigen PHP-Erweiterungen installiert sind:

apt install php-mysql php8.3-sqlite3

Alle benötigen Volltext-Softwarepakete wurden erfolgreich installiert, so dass die Volltextsuche in der Nextcloud eingebunden werden kann.

2. Installation der Nextcloud-Apps

Führen Sie die nachfolgenden Befehle aus, um die vier Apps über Nextcloud Kommandozeile zu installieren:

sudo -u www-data php /var/www/nextcloud/occ app:enable fulltextsearch
sudo -u www-data php /var/www/nextcloud/occ app:enable fulltextsearch_elasticsearch
sudo -u www-data php /var/www/nextcloud/occ app:enable files_fulltextsearch
sudo -u www-data php /var/www/nextcloud/occ app:enable files_fulltextsearch_tesseract

Sie können die Apps natürlich auch über den Nextcloud-Appstore im Browser aktivieren.

Konfigurieren Sie als Nextcloud-Administrator die Volltexteinstellungen wie dargestellt:

Sofern die Überprüfung der Volltextsuche erfolgreich abgeschlossen wurde,

sudo -u www-data php /var/www/nextcloud/occ fulltextsearch:test

so kann der eigentliche Volltextindex initial erstellt werden. Da die Erstellungsdauer abhängig vom Datenbestand und -volumen ist, führen wir die initiale Erstellung im Hintergrund (screen) durch.

screen -S NC-INDEX
sudo -u www-data php /var/www/nextcloud/occ fulltextsearch:index

Hinweis:

  • diese screen-Session verlassen Sie mit < STRG+A > gefolgt von < d >.
  • Zurück zu dieser Session gelangen Sie mittel < screen -r >

Sobald der Index erstellt wurde kommt der blinkende Cursor zum Prompt zurück.

3. Optional: Einrichtung eines Nextcloud-Service

Möchten Sie eine sofortige Indizierung anstelle der cron-gesteuerten Indizierung einrichten, so erstellen Sie den Nextcloud-Index-Dienst. Dieser indiziert neue Dokumente sofort und fügt diese dem bestehenden Index hinzu.

nano /etc/systemd/system/nextcloud-fulltext-elasticsearch-worker.service 

Fügen Sie diesen Text hinein:

[Unit]
Description=Elasticsearch Worker for Nextcloud Fulltext Search
After=network.target mariadb.service redis-server.service elasticsearch.service
Requires=mariadb.service elasticsearch.service

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/nextcloud
ExecStart=/usr/bin/php /var/www/nextcloud/occ fulltextsearch:live -q
ExecStop=/usr/bin/php /var/www/nextcloud/occ fulltextsearch:stop
Nice=19
Restart=always

[Install]
WantedBy=multi-user.target

Aktivieren und starten Sie den neuen Index-Service:

systemctl enable nextcloud-fulltext-elasticsearch-worker.service
systemctl start nextcloud-fulltext-elasticsearch-worker.service

Die Volltextsuche kann nun bereits genutzt werden und sieht in der neuen Suche von Nextcloud Hub 7 wie folgt aus.

4. JVM-Paramater

Um den Speicherverbrauch von Elasticsearch einzugrenzen empfehlen wir, die JVM-Parameter anzupassen. In der Praxis zeigte sich diese Datei als ein guter, durchschnittlicher Ansatz:

nano /etc/elasticsearch/jvm.options.d/jvm.options

Fügen Sie in diese Datei folgenden Inhalt ein (Annahme: Server mit 16GB RAM, sonst bitte auf bspw. 2g reduzieren):

-Xms4g
-Xmx4g

Starten Sie den Elasticsearch-Service neu.

systemctl restart elasticsearch.service

Weiterführende Links:

Die Installation der Volltextsuche mit Elasticsearch 8 wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihren Daten in Ihrer privaten Cloud. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!

Carsten Rieger IT-Services | Slogan