# Fulltext Search in Nextcloud

Volltextsuche für Nextcloud

## Neue Vorgehensweise

Machen wir uns also zunächst an die Installation von Elasticsearch. Als erstes bringen wir das System wie immer auf den neusten Stand:

```
apt update && apt upgrade -V
```

<div class="wp-block-codemirror-blocks-code-block code-block" id="bkmrk-"><div class="CodeMirror CodeMirror-simplescroll cm-s-darcula"><div class="CodeMirror-scroll" draggable="true" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: -17px; border-right-width: 13px; min-height: 33px; min-width: 231px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-code" role="presentation"></div></div></div></div></div><div style="position: absolute; height: 13px; width: 1px; border-bottom: 0px solid transparent; top: 33px;">  
</div></div></div></div>Als nächstes müssen die Paketquellen für Elasticsearch auf dem System hinzugefügt werden, da wir Elasticsearch aus den Paketquellen des Herstellers installieren wollen. Dazu holen wir uns erst einmal den Repository-Key auf das System:

```
wget -O - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /etc/apt/keyrings/elasticsearch-keyring.gpg
```

Dann werden die Paketquellen selbst hinzugefügt:

```
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
```

Nun kann Elasticsearch auch schon installiert werden:

```
apt update && apt install elasticsearch
```

<div class="wp-block-codemirror-blocks-code-block code-block" id="bkmrk--3"><div class="CodeMirror CodeMirror-simplescroll cm-s-darcula"><div class="CodeMirror-scroll" draggable="true" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: -17px; border-right-width: 13px; min-height: 33px; min-width: 319px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"></div></div></div></div></div></div></div>Während der Installation werden euch ein paar Infos angezeigt:

<div class="wp-block-codemirror-blocks-code-block code-block" id="bkmrk--4"><div class="CodeMirror CodeMirror-simplescroll cm-s-darcula"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 4px; left: 4px;"><textarea spellcheck="false" style="position: absolute; bottom: -1em; padding: 0px; width: 1px; height: 1em; outline: none;" tabindex="0" wrap="off"></textarea>  
</div></div></div>```
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : <password>

...

-------------------------------------------------------------------------------------------------
```

Das hier angezeigte Passwort könnt ihr euch mal an einem sicheren Ort notieren (z.B. in einem Passwort-Safe). Der dazugehörige Benutzer trägt dabei den Namen „elastic“. Seit Elasticsearch 8 ist die erweitere Sicherheit standardmäßig aktiviert. Um daher mit Elasticsearch „sprechen“ zu können, werden diese Anmeldedaten benötigt.  
Da wir Elasticsearch später so konfigurieren werden, dass der Zugriff nur lokal auf dem Server stattfinden kann, werden diese Sicherheitsfeatures nicht benötigt. Trotzdem würde ich empfehlen, dass ihr euch das hier angezeigte Passwort irgendwo notiert, falls ihr dieses später doch mal benötigen solltet.

I have managed to solved it on my own.

So exit code 137 means that Elasticsearch is taking up too much memory in my server.

My solution was to locate jvm.options in /etc/elasticsearch.

I have copied a **jvm.options** into **jvm.options.d** folder and uncommented a line to set this inside.

-Xms1g  
-Xmx1g

<div class="codeblock-button-wrapper" id="bkmrk--6" style="position: absolute; display: flex; right: 3px;"><button aria-label="copy code to clipboard" class="btn nohighlight copy-cmd btn-flat" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif; font-size: var(--font-down-2); line-height: var(--line-height-small); margin: 0px; overflow: visible; text-transform: none; appearance: button; color: var(--primary); cursor: pointer; font-weight: normal; border: 0px; box-sizing: border-box; padding: 0.5em 0.65em; display: inline-flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0); border-radius: var(--d-button-border-radius); transition: 0.2s; user-select: none; top: 0px; min-height: 0px; opacity: 0; visibility: hidden;"><svg class="fa d-icon d-icon-copy svg-icon svg-string" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="show code in full screen" class="btn nohighlight fullscreen-cmd btn-flat" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif; font-size: var(--font-down-2); line-height: var(--line-height-small); margin: 0px; overflow: visible; text-transform: none; appearance: button; color: var(--primary); cursor: pointer; font-weight: normal; border: 0px; box-sizing: border-box; padding: 0.5em 0.65em; display: inline-flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0); border-radius: var(--d-button-border-radius); transition: 0.2s; user-select: none; top: 0px; min-height: 0px; opacity: 0; visibility: hidden;"><svg class="fa d-icon d-icon-discourse-expand svg-icon svg-string" xmlns="http://www.w3.org/2000/svg"></svg></button></div>```shell
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## which should be named with .options suffix, and the min and
## max should be set to the same value. For example, to set the
## heap to 4 GB, create a new file in the jvm.options.d
## directory containing these lines:
##
-Xms1g
-Xmx1g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/8.14/heap-size.html
## for more information
##

```

Hope it helps!

Ebenso sagt euch die Installation, dass Elasticsearch noch nicht gestartet wurde. Freundlicherweise werden aber im gleichen Atemzug die Befehle aufgeführt, mit denen ihr dies bewerkstelligen könnt:

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

<details id="bkmrk-vorherige-vorgehensw"><summary>Vorherige Vorgehensweise</summary>

> Da die Signierung der vorherigen Vorgehensweise veraltet ist.

**Ubuntu**

```
apt install apt-transport-https sudo wget curl gnupg
```

```
echo "deb [signed-by=/etc/apt/trusted.gpg.d/elasticsearch.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main"| \
  tee -a /etc/apt/sources.list.d/elastic-7.x.list > /dev/null
```

```
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
gpg --dearmor | tee /etc/apt/trusted.gpg.d/elasticsearch.gpg> /dev/null
```

```
apt update
```

```
apt install elasticsearch
```

```
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment
```

Nach dem installieren von Elasticsearch and die Plugins den Start aktivieren

```
systemctl start elasticsearch
```

```
systemctl enable elasticsearch
```

</details>[Weiter geht es, um auch PDF's durchsuchen zu können](#bkmrk-um-auch-pdf-dokument)

<details id="bkmrk-vorherige-vorgehensw-1"><summary>Vorherige Vorgehensweise</summary>

![](https://www.c-rieger.de/wp-content/uploads/2020/10/NCVoll2021.png)

### Nextcloud mit Elasticsearch/Tessaract

Wir beginnen mit der Aktualisierung des Servers selbst.

```
sudo -s

```

```
apt update && apt upgrade

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-07-17-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-07-17.png)

Im Anschluss daran werden die Softwareanforderungen an die Volltextsuche sichergestellt und erfüllt.

```
apt install apt-transport-https ca-certificates
apt install openjdk-8-jre

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-09-23-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-09-23.png)

Jetzt laden wir den elasticsearch-Key des Software-Repositories herunter und publizieren diesen im System

```
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

```

um das hinzuzufügende Repository nutzen zu können:

```
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch7.list

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-12-28-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-12-28.png)

Elasticsearch kann nun bereits installiert werden:

```
apt update && apt install elasticsearch -y

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-14-22-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-14-22.png)

Die Installation ist abgeschlossen – konfigurieren wir Elasticsearch noch für den automatischen Start:

```
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-19-59-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-19-59.png)

</details>#### Um auch PDF Dokumente inhaltlich durchsuchen zu können installieren wir noch ein Plugin für Elasticsearch:

```
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-25-41-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-25-41.png)

Abschließend editieren wir noch die Konfiguration hinsichtlich des network.host:

```
nano /etc/elasticsearch/elasticsearch.yml

```

Tragen Sie Folgendes ein:

```
network.host: 127.0.0.1

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-27-09-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-27-09.png)

Nach einem Neustart von Elasticsearch ist die Volltextsuche für Nextcloud bereits vorbereitet und einsatzfähig.

```
service elasticsearch restart

```

Um Text aus Bildern lesbar und somit auch durchsuchbar zu machen benötigen wir noch Tessaract (OCR).

```
apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-28-38-300x197.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-28-38.png)

Nach einem Neustart des elasticsearch-Services

```
service elasticsearch restart

```

können wir mit der Einrichtung, also der Aktivierung und Konfiguration der Apps in Nextcloud fortfahren.

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-35-26-300x169.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-35-26.png)

Aktivieren Sie mindestens diese Apps:

- Full text search – Diese App bietet die Grundfunktionen zur Volltextsuche
- Full text search – Elasticsearch Platform: Dies stellt die Verbindung zur Suchmaschine her.
- Full text search – Files: Erweitert die Dateien-App um die Volltextsuche.
- Full text search – Files – Tesseract OCR: Verbindung zu Tesseract.

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-36-57-300x169.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-36-57.png)

Bevor die Volltextsuche in Nextcloud genutzt werden kann muss diese noch konfiguriert werden. Dies geschieht in den Nextcloud-Administratoreinstellungen unter Volltextsuche:

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-41-51-1024x577.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-41-51.png)

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-43-35-1024x577.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-43-35.png)

Die Werte werden automatisch gespeichert! Nun erzeugen wir noch initial den Volltextindex über das Nextcloud Kommandozeilentool occ:

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

```

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-51-19-300x201.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-51-19.png)

> **Achtung:**  
> Je nach Größe des Datenbestands kann dieser Befehl Minuten bis Stunden dauern.

Nach dem initialen Anlegen des Volltextindexes muss der zuvor ausgeführte Befehl **nicht** mehr regelmäßig ausgeführt werden. Die Aktualisierung des Indexes erfolgt dann im Rahmen des Nextcloud-Cronjobs.

Nach der Indizierung finden Sie über die Suche Dokumente sowohl über die Dateienamen, als auch über Inhalte.

[![](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-53-15-300x169.png)](https://www.c-rieger.de/wp-content/uploads/2020/10/Bildschirmfoto-von-2020-10-21-11-53-15.png)

Sofern Updates eingespielt werden muss das Plugin aktualisiert werden. Ein Blick in das Logfile lohnt sich und gibt entsprechende Auskunft:

```
nano /var/log/elasticsearch/elasticsearch.log

```

> „… org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Plugin \[ingest-attachment\] was built for Elasticsearch version…“

#### Update Plugin nach Update Nextcloud oder Rechner

Wir entfernen zuerst das bestehende Plugin,

```
/usr/share/elasticsearch/bin/elasticsearch-plugin remove ingest-attachment

```

um es anschließend in der neuen Version zu installieren:

```
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment

```

Nach einem Neustart des Dienstes wird die Volltextsuche wieder funktionieren.

---

Die Installation und Konfiguration der Volltextsuche für Ihren Nextcloudserver 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!