Aperçu
Le connecteur Elasticsearch/OpenSearch fournit la fonctionnalité permettant de récupérer des données à partir d’un cluster Elasticsearch ou OpenSearch et de les enregistrer dans l’index Fess.
Cette fonctionnalité nécessite le plugin fess-ds-elasticsearch.
Versions prises en charge
Elasticsearch 7.x / 8.x
OpenSearch 1.x / 2.x
Prérequis
L’installation du plugin est requise
L’accès en lecture au cluster Elasticsearch/OpenSearch est nécessaire
Les droits d’exécution de requêtes sont nécessaires
Installation du plugin
Méthode 1 : Placement direct du fichier JAR
Méthode 2 : Installation depuis l’interface d’administration
Ouvrir « Système » -> « Plugins »
Télécharger le fichier JAR
Redémarrer Fess
Configuration
Configurez depuis l’interface d’administration via « Crawler » -> « Data Store » -> « Nouveau ».
Configuration de base
| Élément | Exemple |
|---|---|
| Nom | External Elasticsearch |
| Nom du gestionnaire | ElasticsearchDataStore / ElasticsearchListDataStore |
| Active | Oui |
Note
ElasticsearchListDataStore est un gestionnaire qui étend ElasticsearchDataStore. Il traite les données récupérées sous forme de liste de fichiers et prend en charge l’indexation multi-thread. Le nombre de threads peut être spécifié avec le paramètre numOfThreads (par défaut : 1).
Configuration des paramètres
Connexion de base :
Connexion avec authentification :
Liste des paramètres
| Paramètre | Requis | Description |
|---|---|---|
settings.http.hosts | Non | URL des hôtes Elasticsearch/OpenSearch. Plusieurs hôtes peuvent être spécifiés en les séparant par des virgules (ex : http://host1:9200,http://host2:9200). Une erreur de connexion se produit si non spécifié |
settings.fesen.username | Non | Nom d’utilisateur pour l’authentification |
settings.fesen.password | Non | Mot de passe pour l’authentification |
index | Non | Nom de l’index cible (par défaut : _all). Plusieurs index peuvent être spécifiés en les séparant par des virgules |
size | Non | Nombre d’éléments récupérés lors du scroll (si non spécifié, la valeur par défaut du serveur Elasticsearch/OpenSearch est utilisée) |
scroll | Non | Timeout du scroll (par défaut : 1m) |
timeout | Non | Timeout de la requête (par défaut : 1m) |
query | Non | JSON de requête (par défaut : match_all). Spécifier uniquement le corps de la requête (le wrapper externe {"query":...} n’est pas nécessaire) |
fields | Non | Champs à récupérer (séparés par des virgules) |
preference | Non | Préférence de réplique de shard pour l’exécution de la recherche (par défaut : _local) |
delete.processed.doc | Non | Supprimer les documents traités de l’index source (par défaut : false) |
readInterval | Non | Temps d’attente entre le traitement de chaque document en millisecondes (par défaut : 0) |
numOfThreads | Non | Nombre de threads pour l’indexation (valide uniquement pour ElasticsearchListDataStore, par défaut : 1) |
Paramètres de connexion supplémentaires
Les paramètres préfixés par settings. sont transmis comme configuration du client HTTP Elasticsearch/OpenSearch interne (client HTTP fesen). Les principaux paramètres supplémentaires sont les suivants.
| Paramètre | Description |
|---|---|
settings.http.ssl.certificate_authorities | Chemin du fichier de certificat CA de confiance (format X.509) pour les connexions HTTPS |
settings.http.compression | Activer la compression HTTP (par défaut : true) |
settings.http.proxy_host | Nom d’hôte du serveur proxy (settings.https.proxy_host est également accepté) |
settings.http.proxy_port | Numéro de port du serveur proxy (settings.https.proxy_port est également accepté) |
settings.http.proxy_username | Nom d’utilisateur pour l’authentification proxy (settings.https.proxy_username est également accepté) |
settings.http.proxy_password | Mot de passe pour l’authentification proxy (settings.https.proxy_password est également accepté) |
Configuration du script
Mapping de base :
Accès aux champs imbriqués :
Champs disponibles
source.<field_name>- Champ_sourcedu document Elasticsearchid- ID du documentindex- Nom de l’indexscore- Score de rechercheversion- Version du documentseqNo- Numéro de séquenceprimaryTerm- Terme primaireclusterAlias- Alias du cluster (pour la recherche inter-clusters)hit- Objet SearchHit (utilisation avancée)
Configuration des requêtes
Récupération de tous les documents
Par défaut, tous les documents sont récupérés. Si le paramètre query n’est pas spécifié, match_all est utilisé.
Filtrage par conditions spécifiques
Spécification de plage :
Conditions multiples :
Note
Le paramètre query n’accepte que le corps de la requête. Le wrapper externe {"query":...} n’est pas nécessaire. Les options de niveau recherche telles que le tri ne peuvent pas être spécifiées dans ce paramètre.
Récupération de champs spécifiques uniquement
Limitation des champs avec le paramètre fields
Pour récupérer tous les champs, ne spécifiez pas fields ou laissez-le vide.
Exemples d’utilisation
Crawl d’un index de base
Paramètres :
Script :
Crawl d’un cluster avec authentification
Paramètres :
Script :
Crawl de plusieurs index
Paramètres :
Script :
Crawl d’un cluster OpenSearch
Paramètres :
Script :
Crawl avec limitation de champs
Paramètres :
Script :
Répartition de charge multi-hôtes
En spécifiant plusieurs hôtes séparés par des virgules dans settings.http.hosts, les requêtes sont distribuées entre chaque hôte.
Paramètres :
Script :
Dépannage
Erreur de connexion
Symptôme : Connection refused ou No route to host
Points à vérifier :
Vérifier si l’URL de l’hôte est correcte (protocole, nom d’hôte, port)
Vérifier si Elasticsearch/OpenSearch est en cours d’exécution
Vérifier les paramètres du pare-feu
Pour HTTPS, vérifier si le certificat est valide
Erreur d’authentification
Symptôme : 401 Unauthorized ou 403 Forbidden
Points à vérifier :
Vérifier si le nom d’utilisateur et le mot de passe sont corrects
Vérifier si l’utilisateur a les droits appropriés :
Droits de lecture sur l’index
Droits d’utilisation de l’API scroll
Si Elasticsearch Security (X-Pack) est activé, vérifier si la configuration est correcte
Index introuvable
Symptôme : index_not_found_exception
Points à vérifier :
Vérifier si le nom de l’index est correct (incluant la casse)
Vérifier si l’index existe :
Vérifier si le pattern wildcard est correct (ex :
logs-*)
Erreur de requête
Symptôme : parsing_exception ou search_phase_execution_exception
Points à vérifier :
Vérifier si le JSON de la requête est correct
Vérifier si la requête est compatible avec la version d’Elasticsearch/OpenSearch
Vérifier si les noms de champs sont corrects
Tester la requête directement sur Elasticsearch/OpenSearch :
Timeout du scroll
Symptôme : No search context found ou Scroll timeout
Solution :
Augmenter
scroll:Réduire
size:Vérifier les ressources du cluster
Crawl de données volumineuses
Symptôme : Le crawl est lent ou expire
Solution :
Ajuster
size(trop grand le ralentit) :Limiter les champs récupérés avec
fieldsFiltrer les documents nécessaires avec
queryDiviser en plusieurs data stores (par index, par période, etc.)
Mémoire insuffisante
Symptôme : OutOfMemoryError
Solution :
Réduire
sizeLimiter les champs récupérés avec
fieldsAugmenter la taille du tas de Fess
Exclure les champs volumineux (données binaires, etc.)
Connexion SSL/TLS
Cas de certificat auto-signé
Avertissement
Utilisez des certificats signés de manière appropriée en environnement de production.
Méthode 1 : Spécifier le certificat CA avec le paramètre settings.http.ssl.certificate_authorities (recommandé)
Indiquez le chemin du fichier de certificat CA de confiance (format X.509). Cette méthode n’affecte pas le keystore global de Fess.
Méthode 2 : Ajouter le certificat au keystore Java
Ajoutez le certificat au trust store de la JVM qui démarre Fess.
Connexion via un proxy
Pour se connecter via un serveur proxy, spécifiez settings.http.proxy_host et settings.http.proxy_port.
Exemples de requêtes avancées
Requête avec agrégation
Note
Le paramètre query n’accepte que le corps de la requête. Les agrégations (aggs), le tri et autres options de niveau recherche ne peuvent pas être spécifiés. Seuls les documents sont récupérés.
Champs de script
Note
Les champs de script Elasticsearch/OpenSearch ne sont pas inclus dans _source et ne peuvent donc pas être accédés via le préfixe source.*. Pour utiliser les champs de script, accédez-y via l’objet hit en utilisant hit.getFields().
Informations de référence
Aperçu des connecteurs DataStore - Aperçu des connecteurs Data Store
Connecteur de base de données (recherche de base de données) - Connecteur de base de données
Crawl de magasin de données - Guide de configuration Data Store