NextBox: Volltextsuche mit Elasticsearch arbeitet nicht

Liebe Forum,

es geht um die Volltextsuche mit Elasticsearch in der NextBox:

*** Diese Apps sind installiert: ***
Full text search (21.0.2)
Full text search - Files (21.0.2)
Full text search - Elasticsearch Platform (21.0.2)

In der NextCloud-Oberfläche (“Einstellungen” - “Volltextsuche”) wurden die erforderlichen Einstellungen vorgenommen, aber die Volltextsuche funktioniert nicht.

Die Einstellungen sind mit “fulltextsearch:check” in der OCC-Anwendung anzuzeigen:

occ $ fulltextsearch:check
{
“elastic_host”: [
http://localhost:9200
],
“elastic_index”: “fullidx”,
“fields_limit”: “10000”,
“es_ver_below66”: “0”,
“analyzer_tokenizer”: “standard”
}{
“files_local”: “1”,
“files_external”: “2”,
“files_group_folders”: “1”,
“files_encrypted”: “0”,
“files_federated”: “0”,
“files_size”: “20”,
“files_pdf”: “1”,
“files_office”: “1”,
“files_image”: “0”,
“files_audio”: “0”
}

Offenbar ist aber die Servelet-URL falsch, denn “fulltextsearch:test” bringt diesen Fehler:

occ $ fulltextsearch:test

.Testing your current setup:
Creating mocked content provider. ok
Testing mocked provider: get indexable documents. (2 items) ok
Loading search platform. (Elasticsearch) ok
Testing search platform. fail
In StaticNoPingConnectionPool.php line 64:

No alive nodes found in your cluster

fulltextsearch:test [–output [OUTPUT] [-j|–json] [-d|–platform_delay PLATFORM_DELAY]]

Für die Adresse des Servlets habe ich schon alles Mögliche versucht:

  • 127.0.0.2:9200
  • elasticserach:9200
  • Variationen mit und ohne http…

Kein Erfolg.

Weiß jemand hier im Forum, wie man die Volltextsuche mit Elasticsearch in der NextBox zum Fliegen kriegt?

Besten Dank!

GinFizz

Zum Thema App-Support zur Nextcloud/NextBox bitte diese FAQ beachten: Nextcloud FAQ — Nitrokey Documentation

Darüber hinaus würde ich vorschlagen zu debuggen ob die search-platform (der elastic server) verfügbar ist, am besten aus dem Nextcloud container heraus.

Hallo GinFizz

Derzeit verwende ich eine experimentelle Konfguration eines “es multinode clusters” auf Basis dieser Beschreibung: Install Elasticsearch with Docker | Elasticsearch Guide [8.12] | Elastic

Ähnlich, wie von Dir geschildert beobachte ich häufiger (*) dieses Verhalten:

Nach jedem Neustart der ElasticSearch Container meldet “occ fulltextsearch:test” auf dem “nextcloud CLI” den Fehler “No alive nodes found in your cluster”.

Eine systematische Erfassung des Fehlverhaltens führte ich noch nicht durch.

Zum Nachweis, dass die “es” Container gestartet und die “es” Prozesse fertig gestartet sind, nutze ich

  • eine Prüfung der “fulltextsearch” App Konfiguration:
    Im Konfigurationsdialog der App “fulltextsearch” trug ich die URL des ersten “es” Containers es01 ein.

  • diesen Aufruf (nextbox CLI):

curl -X GET "127.0.0.1:9200/_cat/nodes?v=true&pretty"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
1nn.mm.0.4 19 58 67 5.12 3.81 1.67 cdfhilmrstw - es03
1nn.mm.0.3 37 58 67 5.12 3.81 1.67 cdfhilmrstw * es01
1nn.mm.0.2 29 58 67 5.12 3.81 1.67 cdfhilmrstw - es02

  • einen Blick auf die Logeinträge mindestens des Containers “es01”:


[2021-09-17T11:53:54,015][INFO ][o.e.p.PluginsService ] [es01] loaded module [x-pack-text-structure]
[2021-09-17T11:53:54,017][INFO ][o.e.p.PluginsService ] [es01] loaded module [x-pack-voting-only-node]
[2021-09-17T11:53:54,019][INFO ][o.e.p.PluginsService ] [es01] loaded module [x-pack-watcher]
[2021-09-17T11:53:54,023][INFO ][o.e.p.PluginsService ] [es01] loaded plugin [ingest-attachment]
[2021-09-17T11:53:54,342][INFO ][o.e.e.NodeEnvironment ] [es01] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [1.6tb], net total_space [1.7tb], types [ext4]
[2021-09-17T11:53:54,345][INFO ][o.e.e.NodeEnvironment ] [es01] heap size [512mb], compressed ordinary object pointers [true]
[2021-09-17T11:53:54,810][INFO ][o.e.n.Node ] [es01] node name [es01], node ID [8VUha04pTMqoWxjUjkqO5w], cluster name [es-docker-cluster], roles [transform, data_frozen, master, remote_cluster_client, data, ml, data_content, data_hot, data_warm, data_cold, ingest]
[2021-09-17T12:10:40,342][INFO ][o.e.n.Node ] [es01] version[7.14.1], pid[7], build[default/docker/66b55ebfa59c92c15db3f69a335d500018b3331e/2021-08-26T09:01:05.390870785Z], OS[Linux/5.10.17-v8+/aarch64], JVM[Eclipse Foundation/OpenJDK 64-Bit Server VM/16.0.2/16.0.2+7]
[2021-09-17T12:10:40,388][INFO ][o.e.n.Node ] [es01] JVM home [/usr/share/elasticsearch/jdk], using bundled JDK [true]
[2021-09-17T12:10:40,400][INFO ][o.e.n.Node ] [es01] JVM arguments [-Xshare:auto, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -XX:+ShowCodeDetailsInExceptionMessages, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dio.netty.allocator.numDirectArenas=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.locale.providers=SPI,COMPAT, --add-opens=java.base/java.io=ALL-UNNAMED, -XX:+UseG1GC, -Djava.io.tmpdir=/tmp/elasticsearch-13354192362627189037, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m, -Des.cgroups.hierarchy.override=/, -Xms512m, -Xmx512m, -XX:MaxDirectMemorySize=268435456, -XX:G1HeapRegionSize=4m, -XX:InitiatingHeapOccupancyPercent=30, -XX:G1ReservePercent=15, -Des.path.home=/usr/share/elasticsearch, -Des.path.conf=/usr/share/elasticsearch/config, -Des.distribution.flavor=default, -Des.distribution.type=docker, -Des.bundled_jdk=true]

Etwa ab dem Log-Eintrag der JVM (JVM arguments …) antworten die ES Prozesse des Containers auf Anfragen.

Suche in Gang setzen
Bisher (Experimente) setze ich die Suche wie folgt in Gang, wenn die ES Container neu gestartet wurden:

  1. deaktivieren und deinstallieren der Apps zum Thema „fulltextsearch“;
  2. installieren und aktivieren der Apps zum Thema „fulltextsearch“;
  3. ein wenig warten.

Schlussfolgerung
Daraus schliesse ich vorerst:

  1. Die ES Prozesse erfordern eine gewisse Zeitspanne für den Start, ein ES Cluster auf demselben Nextcloud Host braucht noch etwas länger;

  2. Die Nextcloud Application „fulltextsearch“ synchronisiert ihre Liste verfügbarer „ES“ Knoten zum ersten Mal bei der Installation.

  3. Die Nextcloud Application „fulltextsearch“ synchronisiert ihre Liste verfügbarer „ES“ Knoten womöglich im Takt mit dem Aufruf des Nextcloud Schedulers (cron, respektive dessen Nachfolger / Alternativen).

Nächste Schritte

  • Code von “fulltextsearch:text” anschauen, um die Vermutung “regelmässiger Update der ES Konfiguration” zu bekräftigen;
  • ES Fakten studieren, um nach dem Start den Status “ready for use” präzise abfragen zu können;
  • Prüfen, ob mit einer Ergänzung des Codes von “fulltextsearch:text” eine angemessene Resilienz erreicht werden kann.