Übersicht
Der Elasticsearch/OpenSearch-Konnektor bietet die Funktionalität, Daten aus Elasticsearch- oder OpenSearch-Clustern abzurufen und im Fess-Index zu registrieren.
Für diese Funktion ist das Plugin fess-ds-elasticsearch erforderlich.
Unterstützte Versionen
Elasticsearch 7.x / 8.x
OpenSearch 1.x / 2.x
Voraussetzungen
Die Installation des Plugins ist erforderlich
Lesezugriff auf den Elasticsearch/OpenSearch-Cluster ist erforderlich
Berechtigungen zum Ausführen von Abfragen sind erforderlich
Plugin-Installation
Methode 1: JAR-Datei direkt platzieren
# Von Maven Central herunterladen
wget https://repo1.maven.org/maven2/org/codelibs/fess/fess-ds-elasticsearch/X.X.X/fess-ds-elasticsearch-X.X.X.jar
# Platzieren
cp fess-ds-elasticsearch-X.X.X.jar $FESS_HOME/app/WEB-INF/lib/
# oder
cp fess-ds-elasticsearch-X.X.X.jar /usr/share/fess/app/WEB-INF/lib/
Methode 2: Über die Administrationsoberfläche installieren
Öffnen Sie „System“ -> „Plugins“
Laden Sie die JAR-Datei hoch
Starten Sie Fess neu
Konfiguration
Konfigurieren Sie über die Administrationsoberfläche unter „Crawler“ -> „Datenspeicher“ -> „Neu erstellen“.
Grundeinstellungen
| Einstellung | Beispielwert |
|---|---|
| Name | External Elasticsearch |
| Handler-Name | ElasticsearchDataStore |
| Aktiviert | Ein |
Parameter-Einstellungen
Einfache Verbindung:
settings.fesen.http.url=http://localhost:9200
index=myindex
size=100
scroll=5m
Verbindung mit Authentifizierung:
settings.fesen.http.url=https://elasticsearch.example.com:9200
index=myindex
settings.fesen.username=elastic
settings.fesen.password=changeme
size=100
scroll=5m
Mehrere Hosts konfigurieren:
settings.fesen.http.url=http://es-node1:9200,http://es-node2:9200,http://es-node3:9200
index=myindex
size=100
scroll=5m
Parameterliste
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
settings.fesen.http.url | Nein | Elasticsearch/OpenSearch-Hosts (mehrere kommagetrennt). Verbindungsfehler bei fehlender Angabe |
index | Nein | Name des Zielindexes (Standard: _all). Mehrere Indizes können kommagetrennt angegeben werden |
settings.fesen.username | Nein | Benutzername für Authentifizierung |
settings.fesen.password | Nein | Passwort für Authentifizierung |
size | Nein | Abrufgröße beim Scrollen (Standard: 100) |
scroll | Nein | Scroll-Timeout (Standard: 1m) |
query | Nein | Query-JSON (Standard: match_all). Nur den Query-Body angeben (äußerer {"query":...}-Wrapper nicht erforderlich) |
fields | Nein | Abzurufende Felder (kommagetrennt) |
timeout | Nein | Timeout für die Anfrage (Standard: 1m) |
preference | Nein | Shard-Replikat-Präferenz für die Suchausführung (Standard: _local) |
delete.processed.doc | Nein | Ob verarbeitete Dokumente aus dem Quellindex gelöscht werden sollen (Standard: false) |
readInterval | Nein | Wartezeit zwischen der Verarbeitung jedes Dokuments in Millisekunden (Standard: 0) |
Skript-Einstellungen
Einfaches Mapping:
url=source.url
title=source.title
content=source.content
last_modified=source.timestamp
Zugriff auf verschachtelte Felder:
url=source.metadata.url
title=source.title
content=source.body.content
author=source.author.name
created=source.created_at
last_modified=source.updated_at
Verfügbare Felder
source.<field_name>-_source-Feld des Elasticsearch-Dokumentsid- Dokument-IDindex- Indexnamescore- Suchpunktzahlversion- DokumentversionseqNo- SequenznummerprimaryTerm- PrimärtermclusterAlias- Cluster-Alias (für Cross-Cluster-Suche)hit- SearchHit-Objekt (für fortgeschrittene Nutzung)
Query-Konfiguration
Alle Dokumente abrufen
Standardmäßig werden alle Dokumente abgerufen. Wenn der query-Parameter nicht angegeben wird, wird match_all verwendet.
Nach bestimmten Bedingungen filtern
query={"term":{"status":"published"}}
Bereichsangabe:
query={"range":{"timestamp":{"gte":"2024-01-01","lte":"2024-12-31"}}}
Mehrere Bedingungen:
query={"bool":{"must":[{"term":{"category":"news"}},{"range":{"views":{"gte":100}}}]}}
Bemerkung
Der query-Parameter akzeptiert nur den Query-Body. Der äußere {"query":...}-Wrapper ist nicht erforderlich. Such-level-Optionen wie Sortierung können in diesem Parameter nicht angegeben werden.
Nur bestimmte Felder abrufen
Abruffelder mit fields-Parameter einschränken
settings.fesen.http.url=http://localhost:9200
index=myindex
fields=title,content,url,timestamp
size=100
Um alle Felder abzurufen, fields nicht angeben oder leer lassen.
Anwendungsbeispiele
Einfaches Index-Crawling
Parameter:
settings.fesen.http.url=http://localhost:9200
index=articles
size=100
scroll=5m
Skript:
url=source.url
title=source.title
content=source.content
created=source.created_at
last_modified=source.updated_at
Crawling von Cluster mit Authentifizierung
Parameter:
settings.fesen.http.url=https://es.example.com:9200
index=products
settings.fesen.username=elastic
settings.fesen.password=changeme
size=200
scroll=10m
Skript:
url="https://shop.example.com/product/" + source.product_id
title=source.name
content=source.description + " " + source.specifications
digest=source.category
last_modified=source.updated_at
Crawling aus mehreren Indizes
Parameter:
settings.fesen.http.url=http://localhost:9200
index=logs-2024-*
query={"term":{"level":"error"}}
size=100
Skript:
url="https://logs.example.com/view/" + id
title=source.message
content=source.stack_trace
digest=source.service + " - " + source.level
last_modified=source.timestamp
OpenSearch-Cluster crawlen
Parameter:
settings.fesen.http.url=https://opensearch.example.com:9200
index=documents
settings.fesen.username=admin
settings.fesen.password=admin
size=100
scroll=5m
Skript:
url=source.url
title=source.title
content=source.body
last_modified=source.modified_date
Crawling mit eingeschränkten Feldern
Parameter:
settings.fesen.http.url=http://localhost:9200
index=myindex
fields=id,title,content,url,timestamp
size=100
Skript:
url=source.url
title=source.title
content=source.content
last_modified=source.timestamp
Lastverteilung über mehrere Hosts
Parameter:
settings.fesen.http.url=http://es1.example.com:9200,http://es2.example.com:9200,http://es3.example.com:9200
index=articles
size=100
scroll=5m
Skript:
url=source.url
title=source.title
content=source.content
last_modified=source.timestamp
Fehlerbehebung
Verbindungsfehler
Symptom: Connection refused oder No route to host
Zu überprüfen:
Überprüfen Sie, ob die Host-URL korrekt ist (Protokoll, Hostname, Port)
Überprüfen Sie, ob Elasticsearch/OpenSearch läuft
Überprüfen Sie die Firewall-Einstellungen
Bei HTTPS überprüfen Sie, ob das Zertifikat gültig ist
Authentifizierungsfehler
Symptom: 401 Unauthorized oder 403 Forbidden
Zu überprüfen:
Überprüfen Sie Benutzername und Passwort
Überprüfen Sie, ob der Benutzer die entsprechenden Berechtigungen hat:
Leseberechtigung auf den Index
Berechtigung zur Verwendung der Scroll-API
Bei Elasticsearch Security (X-Pack) überprüfen Sie, ob es korrekt konfiguriert ist
Index nicht gefunden
Symptom: index_not_found_exception
Zu überprüfen:
Überprüfen Sie den Indexnamen (einschließlich Groß-/Kleinschreibung)
Überprüfen Sie, ob der Index existiert:
GET /_cat/indices
Überprüfen Sie, ob das Wildcard-Muster korrekt ist (z.B.:
logs-*)
Query-Fehler
Symptom: parsing_exception oder search_phase_execution_exception
Zu überprüfen:
Überprüfen Sie, ob das Query-JSON korrekt ist
Überprüfen Sie, ob die Query mit der Elasticsearch/OpenSearch-Version kompatibel ist
Überprüfen Sie, ob die Feldnamen korrekt sind
Testen Sie die Query direkt in Elasticsearch/OpenSearch:
POST /myindex/_search { "query": {...} }
Scroll-Timeout
Symptom: No search context found oder Scroll timeout
Lösung:
Erhöhen Sie
scroll:scroll=10m
Verringern Sie
size:size=50
Überprüfen Sie die Cluster-Ressourcen
Crawling großer Datenmengen
Symptom: Crawling ist langsam oder Timeout
Lösung:
Passen Sie
sizean (zu groß kann langsam sein):size=100 # Standard size=500 # Größer
Schränken Sie abzurufende Felder mit
fieldseinFiltern Sie mit
querynur benötigte DokumenteTeilen Sie in mehrere Datenspeicher auf (nach Index, Zeitbereich usw.)
Speicherüberlauf
Symptom: OutOfMemoryError
Lösung:
Verringern Sie
sizeSchränken Sie abzurufende Felder mit
fieldseinErhöhen Sie die Heap-Größe von Fess
Schließen Sie große Felder aus (Binärdaten usw.)
SSL/TLS-Verbindung
Bei selbstsignierten Zertifikaten
Warnung
Verwenden Sie in Produktionsumgebungen ordnungsgemäß signierte Zertifikate.
Bei selbstsignierten Zertifikaten fügen Sie das Zertifikat zum Java Keystore hinzu:
keytool -import -alias es-cert -file es-cert.crt -keystore $JAVA_HOME/lib/security/cacerts
Client-Zertifikatauthentifizierung
Wenn ein Client-Zertifikat erforderlich ist, sind zusätzliche Parameter-Einstellungen erforderlich. Details finden Sie in der Elasticsearch-Client-Dokumentation.
Erweiterte Query-Beispiele
Query mit Aggregationen
Bemerkung
Der query-Parameter akzeptiert nur den Query-Body. Aggregationen (aggs), Sortierung und andere Such-level-Optionen können nicht angegeben werden. Es werden nur Dokumente abgerufen.
Skript-Felder
Bemerkung
Elasticsearch/OpenSearch-Skriptfelder sind nicht in _source enthalten und können daher nicht über den source.*-Präfix zugegriffen werden. Um Skriptfelder zu verwenden, greifen Sie über das hit-Objekt mittels hit.getFields() zu.
Weiterführende Informationen
Übersicht der Datenspeicher-Konnektoren - Übersicht der Datenspeicher-Konnektoren
Datenbank-Konnektor - Datenbank-Konnektor
Datenspeicher-Crawl - Leitfaden zur Datenspeicher-Konfiguration