[Nextcloud] Installation von Fulltextsearch

5 min Lesezeit

Originally posted 2018-01-24 09:39:03.

Heute möchte ich Euch erklären, wie ich bei meiner Nextcloud-Installation die neue Suche „Fulltextsearch“ eingerichtet habe. Fulltextsearch ersetzt damit die bisherige erweiterte Suche Nextant. Mit beiden Plugins ist es möglich, PDF Dateien Bilddateien zu durchsuchen und daraus Index Dateien zu erstellen.

Damit das ganze läuft sind ein paar Schritte in der SSH Konsole notwendig und die ganze Prozedur ist in ca. 20 Minuten abgeschlossen.

Auf geht’s!

Als erstes müssen die Packetquellen angepasst und ein paar Dateien installiert werden.

Schritt 1:

sudo apt-get install openjdk-8-jre
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.deb
sudo dpkg -i elasticsearch-6.3.0.deb
sudo /etc/init.d/elasticsearch start

Jetzt wird ein Plugin für Elasticsearch heruntergeladen und installiert.
Dazu diesen Downloadlink besuchen und den Link zur letzten Version per Email zukommen lassen. (aktuell Version 6.3.0)

Den Link aus der Email nun kopieren und folgendes Kommando ausführen.

cd /usr/share/elasticsearch
bin/elasticsearch-plugin install file:///<download_path>/readonlyrest-6.3.0.zip

oder

b

bin/elasticsearch-plugin install file:///httplink/zur/datei/readonylrest-6.3.0.zip

Update:

Schaut das bei der Installation des Plugins immer der komplette Pfad angegeben wird! Also bin/elasticsearch-plugin install file:///usr/elasticsearch/readonlyrest-6.3.0.zip

Nach der Installation muss eine Datei erstellt werden, damit Fulltextsearch mit Elasticsearch kommunizieren kann.

vim /etc/elasticsearch/readonlyrest.yml

Mit diesem Inhalt:

readonlyrest:
 access_control_rules:

  name: Accept requests from cloud1 on my_index
  groups: [„cloud1“]
  indices: [„my_index“]

 users:

  username: netzcloud
  auth_key: netzcloud:aer/ie1Quoo1
  groups: [„cloud1“]

 

 

Update 10.07.2018

Nach einem Update auf Elasticsearch 6.3.1 musste ich in der Datei elasticsearch.yml

xpack.security.enabled: false

einfügen, damit das ganze wieder starten konnte.

Zuvor war der Log damit gefüllt und Nextcloud gab mir die Meldung aus „no Alive Clusters“

[2018-07-10T07:55:43,681][INFO ][t.b.r.c.s.SettingsPoller ] [CLUSTERWIDE SETTINGS] Cluster not ready...
[2018-07-10T07:55:44,682][INFO ][t.b.r.c.s.SettingsPoller ] [CLUSTERWIDE SETTINGS] Cluster not ready...

Quelle:forum.readonlyrest.com

Notiz:

Denkt hier auch einen Nutzernamen aus und ersetzt „username“ mit diesem. Das gleiche gilt für das Passwort. Generiert euch eins (am besten mit pwgen -a -y 12) und setzt dieses für password ein.
In diesem Beispiel oben wird eine Cloud konnektiert mit Elasticsearch.

Zum Schluss wird noch ein Plugin zum indexieren von PDF Dateien installiert:

sudo bin/elasticsearch-plugin install ingest-attachment

Update2:

Editiert in der /etc/elasticsearch/elasticsearch.yml den Host und ändert diesen in eure IP Adresse des Servers.

Startet anschließend Elasticsearch neu damit die Änderungen übernommen werden.

service elasticsearch restart

Kontrolliert abschließend ob Elasticsearch auf den Port 9200 und Java auf Port 9300 lauscht.

netstat - tulpn | grep -v 9200

bzw.

netstat - tulpn | grep -v 9300

Zurück in der Cloud müssen alle 3 Plugins installiert und aktiviert werden.
Im Appstore zu finden unter Werkzeuge

In den Einstellungen von FullTextSearch im Feld „Adress of Servlet:“ dies eintragen: (Hier brauchen wir den Nutzernamen und das Passwort aus der readonlyrest.yml Datei)

http://username:yourPassword@localhost:9200/

unter Index tragen wir folgendes ein:

my_index

Damit wäre die Installation fertig und es lässt sich nun der Index starten mit:

sudo - u www-data php occ fulltextsearch:index

Nach dem ersten kompletten Index werden alle neuen Dateien automatisch indexiert.

Wenn euch was auffällt was nicht passt, oder hier irgendwo hängen bleibt, schreibt es in die Kommentare, würde mich freuen 🙂

 

Update 21.10.18

In einer Telegram Nextcloud Gruppe kursierte ein Docker-Compose File was die Installation noch einfacher macht.

zuerst auf dem Server folgendes ausführen.

echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

mkdir -p /opt/docker-ncsearch && cd /opt/docker-ncsearch

Im Ordner /opt/docker-ncsearch die docker-compose.yml erstellen.

# Docker images: https://www.docker.elastic.co
# Getting started:
# $ echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p # execute on [host]
# $ curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
# $ mkdir -p /opt/docker-ncsearch && cd /opt/docker-ncsearch
# $ # <Save this file as docker-compose.yml>
# $ mkdir -p docker-elasticsearch && echo -e "FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.1\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch ingest-attachment" > docker-elasticsearch/Dockerfile
# $ mkdir -p elasticsearch-data && chown 1000:1000 elasticsearch-data/ -R
# $ docker-compose up -d
#
version: '2.2'
services:
  elasticsearch1:
    build: ./docker-elasticsearch
    container_name: esnode1
    restart: always
    environment:
      - cluster.name=ncsearch
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "network.host=0.0.0.0"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    # location for persistent data
    volumes:
      - $PWD/elasticsearch-data/:/usr/share/elasticsearch/data
    ports: # make elasticsearch reachable on the host itself, when Nextcloud running on the host
      - "127.0.0.1:9200:9200"
    expose:  # make elasticsearch reachable in the internal docker network
      - "9200" # direct elasticsearch connection
    networks:
      ncsearch-network:
        ipv4_address: 172.22.1.235
        aliases:
          - elasticsearch1

  # just a web interface to monitor status
  kibana:
    image: docker.elastic.co/kibana/kibana-oss:6.4.0
    container_name: kibana
    restart: always
    depends_on:
       - elasticsearch1
    environment:
      - "SERVER_BASEPATH=/eskibana"
      - "ELASTICSEARCH_URL=http://elasticsearch1:9200"
    ports:
      - "127.0.0.1:5601:5601"
    networks:
      ncsearch-network:
        ipv4_address: 172.22.1.236
        aliases:
          - kibana

networks:
  ncsearch-network:
    driver: bridge
    ipam:
      driver: default
      config:
        # 192.22.1.232 (ID) - 192.22.1.239 (BC)
        - subnet: 172.22.1.232/29

Nun mit docker-compose up -d asuführen.
Achließend müsste Fulltextsearch mit allem drum und dran laufen und auf den Port lauschen.

Quelle: Github

Update 5.4.2018

Einen fehlenden optionalen Installationschritt hinzugefügt.
Versionen der Programme angepasst

Update 27.3.2018

Hinweis auf den Pfad bei der Plugin-installation hinzugefügt.

Coming Soon

42 Kommentare

  1. Geil, endlich eine Anleitung für die Suche!!! – Ist das immer noch im Alpha-Status?

    Geht hier Texterkennung in Bildern?
    So wie früher bei Nextant mit tesseract?

  2. Hallo Lars,
    leider komme ich beim Downloadlink nicht weiter
    bin/elasticsearch-env: line 70: /etc/default/elasticsearch: Permission denied
    hab diese Fehlermeldung

    Hast Du eine Idee ??

  3. Hallo Lars,
    sudo hat gefehlt
    jetzt hab ich aber die Meldung
    pi@raspberrypi:/usr/share/elasticsearch $ sudo bin/elasticsearch-plugin install file:///download-folder/readonlyrest-1.16.17_es6.2.2.zip
    -> Downloading file:///download-folder/readonlyrest-1.16.17_es6.2.2.zip
    Exception in thread „main“ java.io.FileNotFoundException: /download-folder/readonlyrest-1.16.17_es6.2.2.zip (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.(FileInputStream.java:138)
    at java.io.FileInputStream.(FileInputStream.java:93)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at org.elasticsearch.plugins.InstallPluginCommand.downloadZip(InstallPluginCommand.java:334)
    at org.elasticsearch.plugins.InstallPluginCommand.download(InstallPluginCommand.java:253)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:221)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:212)
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:75)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.Command.main(Command.java:90)
    at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:48)
    pi@raspberrypi:/usr/share/elasticsearch $

  4. Hallo Lars,
    so ich hab deine Anweisung ausgeführt.
    cd /usr/share/elasticsearch
    dann
    der Link aus der Mail
    ReadonlyREST installation instructions

    Download the zip file
    cd to the Elasticsearch home
    bin/elasticsearch-plugin install file:///download-folder/readonlyrest-1.16.17_es6.2.2.zip
    also
    sudo bin/elasticsearch-plugin install file:///download-folder/readonlyrest-1.16.17_es6.2.2.zip

    leider immer das gleiche

    1. Wollte es selber nochmal testen, bekomme aber immer den gleichen Fehler.

      Suche gerade selber nach einer Lösung

      root@panel:/usr/share/elasticsearch# sudo bin/elasticsearch-plugin install file://readonlyrest-1.16.17_es6.1.1.zip
      -> Downloading file://readonlyrest-1.16.17_es6.1.1.zip
      Exception in thread „main“ java.net.UnknownHostException: readonlyrest-1.16.17_es6.1.1.zip
      at j

  5. hallo Lars,
    hab immer noch den fehler
    pi@raspberrypi:/usr/share/elasticsearch $ sudo bin/elasticsearch-plugin install file:///usr/share/elasticsearch/readonlyrest-1.16.17_es6.2.2.zip
    -> Downloading file:///usr/share/elasticsearch/readonlyrest-1.16.17_es6.2.2.zip
    Exception in thread „main“ java.io.FileNotFoundException: /usr/share/elasticsearch/readonlyrest-1.16.17_es6.2.2.zip (No such file or directory)

    blöde frage wie kann ich pi root rechte geben

  6. pi@raspberrypi:~ $ java -version
    openjdk version „1.8.0_151“
    OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)
    OpenJDK Client VM (build 25.151-b12, mixed mode)

    ich mache alles mit sudo 🙂

  7. pi@raspberrypi:~ $ ls – l /usr/share/elasticsearch
    ls: cannot access ‚–‘: No such file or directory
    ls: cannot access ‚l‘: No such file or directory
    /usr/share/elasticsearch:
    bin lib modules NOTICE.txt plugins README.textile
    pi@raspberrypi:~ $
    hab ich einen fehler gemacht

  8. 🙂
    pi@raspberrypi:~ $ ls -l /usr/share/elasticsearch
    total 216
    drwxr-xr-x 2 root root 4096 Mar 16 19:43 bin
    drwxr-xr-x 2 root root 4096 Mar 16 19:43 lib
    drwxr-xr-x 16 root root 4096 Mar 16 19:43 modules
    -rw-r–r– 1 root root 191887 Feb 16 19:03 NOTICE.txt
    drwxr-xr-x 2 root root 4096 Feb 16 19:03 plugins
    -rw-r–r– 1 root root 9267 Feb 16 19:03 README.textile
    pi@raspberrypi:~ $

    1. Hallo Thomas, also ich habe die Anleitung was angepasst. So wie sie da nun steht funktioniert diese auf jedenfall. Hatte meine Installation komplett gelöscht und nochmal nach dieser Anleitung aufgesetzt. Ging wunderbar. Achte darauf das die ZIP Datei im /etc/elasticsearch Ordner zu finden ist.

  9. Hallo Lars,
    ich habe mal den downloadlink aus der Mail angefügt
    Ist aber wieder der gleiche Fehler.
    Ich werde Morgen mal den Raspberry über den Monitor laufen lassen und die Datei runterladen und in das Verzeichnis speichern.
    Gruß
    Thomas

    root@raspberrypi:/usr/share/elasticsearch# bin/elasticsearch-plugin install file:///https://readonlyrest-data.s3.amazonaws.com/build/1.16.18/readonlyrest-1.16.18_es6.2.3.zip?AWSAccessKeyId=ASIAICBQK3OQGERWI6LA&Expires=1522347593&x-amz-security-token=[…]
    [1] 29386
    [2] 29387
    [3] 29388
    root@raspberrypi:/usr/share/elasticsearch# bash: x-amz-security-token=[…]: command not found
    -> Downloading file:///https://readonlyrest-data.s3.amazonaws.com/build/1.16.18/readonlyrest-1.16.18_es6.2.3.zip?AWSAccessKeyId=ASIAICBQK3OQGERWI6LA
    Exception in thread „main“ java.io.FileNotFoundException: /https:/readonlyrest-data.s3.amazonaws.com/build/1.16.18/readonlyrest-1.16.18_es6.2.3.zip (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.(FileInputStream.java:138)
    at java.io.FileInputStream.(FileInputStream.java:93)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at org.elasticsearch.plugins.InstallPluginCommand.downloadZip(InstallPluginCommand.java:334)
    at org.elasticsearch.plugins.InstallPluginCommand.download(InstallPluginCommand.java:253)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:221)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:212)
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:75)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.Command.main(Command.java:90)
    at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:48)

    [1] Exit 1 bin/elasticsearch-plugin install file:///https://readonlyrest-data.s3.amazonaws.com/build/1.16.18/readonlyrest-1.16.18_es6.2.3.zip?AWSAccessKeyId=ASIAICBQK3OQGERWI6LA
    [2]- Done Expires=1522347593
    [3]+ Exit 127 x-amz-security-token=[…]
    root@raspberrypi:/usr/share/elasticsearch#

  10. So hab die datei über USB ins VZ kopiert.
    Er sagt aber immer noch den Fehler

    root@raspberrypi:/usr/share/elasticsearch# ls -l /usr/share/elasticsearch
    total 13896
    drwxr-xr-x 2 root root 4096 Mar 28 18:16 bin
    -rw-r–r– 1 root root 0 Mar 28 20:21 Downloading
    drwxr-xr-x 2 root root 4096 Mar 28 18:16 lib
    drwxr-xr-x 16 root root 4096 Mar 28 18:16 modules
    -rw-r–r– 1 root root 191887 Mar 13 10:08 NOTICE.txt
    drwxr-xr-x 2 root root 4096 Mar 13 10:08 plugins
    -rw-r–r– 1 root root 9268 Mar 13 10:08 README.textile
    -rw-r–r– 1 pi pi 14006156 Mar 28 20:51 readonlyrest-1.16.18_es6.2.3.zip
    root@raspberrypi:/usr/share/elasticsearch# bin/elasticsearch-plugin install file:///usr/elasticsearch/readonlyrest-1.16.18_es6.2.3.zip^C
    root@raspberrypi:/usr/share/elasticsearch# bin/elasticsearch-plugin install file:///usr/elasticsearch/readonlyrest-1.16.18_es6.2.3.zip
    -> Downloading file:///usr/elasticsearch/readonlyrest-1.16.18_es6.2.3.zip
    Exception in thread „main“ java.io.FileNotFoundException: /usr/elasticsearch/readonlyrest-1.16.18_es6.2.3.zip (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.(FileInputStream.java:138)
    at java.io.FileInputStream.(FileInputStream.java:93)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at org.elasticsearch.plugins.InstallPluginCommand.downloadZip(InstallPluginCommand.java:334)
    at org.elasticsearch.plugins.InstallPluginCommand.download(InstallPluginCommand.java:253)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:221)
    at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:212)
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:75)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
    at org.elasticsearch.cli.Command.main(Command.java:90)
    at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:48)

    ist zum mäusemelken
    gruß
    thomas

  11. Hallo Lars,
    vergiss mein oberen Thread, ich habs geschafft im Pfad fehlte share

    nun kommt die nächste hürde
    beim indexierung kommt
    pi@raspberrypi:~ $ sudo -u www-data php occ fulltextsearch:index
    Could not open input file: occ
    pi@raspberrypi:~ $

    gruß
    thomas

  12. hallo Lars,
    der eigentümer von nextcloud ist root aber der ordner ist leer, es ist alles unter html
    dort ist auch occ.
    dann lauscht auch keiner auf 9200

    root@raspberrypi:/var# ls -l /var/www/html
    total 108
    drwxr-xr-x 33 www-data www-data 4096 Mar 21 22:33 3rdparty
    drwxr-xr-x 40 www-data www-data 4096 Mar 30 15:47 apps
    -rw-r–r– 1 www-data www-data 12063 Mar 21 22:33 AUTHORS
    drwxr-xr-x 2 www-data www-data 4096 Mar 21 22:33 config
    -rw-r–r– 1 www-data www-data 3593 Mar 21 22:33 console.php
    drwxr-xr-x 17 www-data www-data 4096 Mar 21 22:33 core
    -rw-r–r– 1 www-data www-data 4946 Mar 21 22:33 cron.php
    drwxrwx— 6 www-data www-data 4096 Mar 21 22:32 data
    -rw-r–r– 1 www-data www-data 179 Mar 21 22:33 index.html
    -rw-r–r– 1 www-data www-data 3417 Mar 21 22:33 index.php
    drwxr-xr-x 6 www-data www-data 4096 Mar 21 22:33 lib
    -rw-r–r– 1 www-data www-data 283 Mar 21 22:33 occ
    drwxr-xr-x 2 www-data www-data 4096 Mar 21 22:33 ocs
    drwxr-xr-x 2 www-data www-data 4096 Mar 21 22:33 ocs-provider
    -rw-r–r– 1 www-data www-data 3214 Mar 21 22:33 public.php
    -rw-r–r– 1 www-data www-data 5370 Mar 21 22:33 remote.php
    drwxr-xr-x 4 www-data www-data 4096 Mar 21 22:33 resources
    -rw-r–r– 1 www-data www-data 26 Mar 21 22:33 robots.txt
    drwxr-xr-x 14 www-data www-data 4096 Mar 21 22:33 settings
    -rw-r–r– 1 www-data www-data 2274 Mar 21 22:33 status.php
    drwxr-xr-x 3 www-data www-data 4096 Mar 21 22:33 themes
    drwxr-xr-x 2 www-data www-data 4096 Mar 21 22:34 updater
    -rw-r–r– 1 www-data www-data 362 Mar 21 22:33 version.php
    root@raspberrypi:/var#

  13. so vergiss den oberen thread bin jetzt weiter

    sudo -u www-data php occ fulltextsearch:index
    indexing Files.

    [ElasticsearchCommonExceptionsNoNodesAvailableException]
    No alive nodes found in your cluster

    fulltextsearch:index [–output [OUTPUT]]

    weil keiner auf 9200 lauscht ???

    1. Jepp das hatte ich auch. Bei mir lief elasticsearch nicht aufgrund eines Fehlers. Schau mal mit netstat – tulpn | grep -v 9200 ob elasticsearch richtig läuft. Dann schau mal mit tail -f /var/log/elasticsearch/elasticsearch.log ob dort was an Fehlern zu sehen ist.

  14. Hi Lars,
    vielen Dank für die Dateien, dort war tatsächlich ein Fehler , ich habe alles in eine Datei gepackt.

    Leider lauscht noch immer keiner auf 9200 oder 9300
    was steht bei dir bei java -version ?

    ist dort auch ein java server ?
    bei mir nicht.

    root@raspberrypi:/var/www/html# java -version
    openjdk version „1.8.0_162“
    OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1~deb9u1-b12)
    OpenJDK Client VM (build 25.162-b12, mixed mode)

    1. Haben die gleich Version

      „`
      openjdk version „1.8.0_162“
      OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-0ubuntu0
      .16.04.2-b12)
      OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
      „`

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.