Téléchargement de fichiers vers Elasticsearch
Quelques fonctions Elasticsearch permettent aux index de lire des fichiers du système de fichiers, par conséquent, IBM Cloud® Databases for Elasticsearch vous permet de télécharger des fichiers sur votre déploiement. Les fichiers sont stockés à un emplacement connu, et Elasticsearch est configuré de manière à pouvoir lire des fichiers à partir de l'emplacement.
Les fichiers téléchargés sur votre déploiement utilisent des ressources de disque, à la fois dans l'index et sur le système de fichiers. Prenez soin de mettre à l'échelle votre déploiement avant de télécharger des fichiers.
Processus de base
- Vous codez en base64 le fichier côté client.
- Les chaînes base64 sont stockées en tant que documents dans un index nommé
ibm_file_syncdans votre déploiement Elasticsearch. - Vous déclenchez une synchronisation de fichiers à partir de l'API Cloud Databases.
- Tous les noeuds de votre cluster Elasticsearch téléchargent le contenu de fichier à partir de l'index, décodent le contenu de fichier codé en base64 et restaurent les fichiers sur le disque du déploiement dans le répertoire
/data/ibm_file_sync/current. - A intervalles réguliers, et lors des redémarrages, les fichiers sont resynchronisés pour s'assurer qu'ils sont présents sur tous les noeuds.
- Les fichiers qui se trouvent sur le disque, mais pas dans l'index, sont supprimés. Vous pouvez supprimer des fichiers du disque en les retirant de l'index.
L'indice dansElasticsearch est ibm_file_sync.
L'emplacement des fichiers sur le disque est /data/ibm_file_sync/current.
Dans Elasticsearch 7, l'API supprime les types de document. Se référer au Elasticsearch Documentation pour plus de détails. Prenez en compte cet élément lors d'une mise à jour de versions antérieures.
Téléchargement des fichiers vers l'index
La structure des documents de l'index est la suivante :name est le nom du fichier,blob est lebase64-encoded contenu du fichier, et md5 est une valeur de hachage facultative sur le contenu du fichier. Le
mappage recommandé pour l'index est réparti en fonction de la version.
Pour Elasticsearch 6 :
curl -X PUT "https://user:password@host:port/ibm_file_sync" -H 'Content-Type: application/json' -d'
{
"mappings": {
"files": {
"properties": {
"name": {
"type": "text"
},
"blob": {
"type": "binary"
},
"md5": {
"type": "text"
}
}
}
}
}'
Pour Elasticsearch 7 (notez le retrait de la section files) :
curl -X PUT "https://user:password@host:port/ibm_file_sync" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"blob": {
"type": "binary"
},
"md5": {
"type": "text"
}
}
}
}'
L'URL est le httpschaîne de connexion de votre déploiement.
Pour utiliser l'index, codez le contenu du fichier en base64. Pour coder un exemple de fichier README.md dans bash, ENC=$(base64 -w 0 README.md). Ensuite, générez une somme de contrôle sur le contenu, HASH=$(md5sum README.md).
La fonction de téléchargement compare les valeurs de hachage à chaque exécution de synchronisation et si les valeurs sont inchangées depuis la dernière synchronisation, aucun nouveau téléchargement n'est tenté. Si un document de l'index ne comporte pas de valeur md5, tous les téléchargements font l'objet d'une nouvelle tentative.
Ensuite, téléchargez le document dans l'index. Notez que le nom de fichier est également indiqué dans l'URL.
Pour Elasticsearch 6 :
curl -X PUT "https://user:password@host:port/ibm_file_sync/files/README1.md" -H 'Content-Type: application/json' -d'
{
"name": "README1.md",
"blob": '"\"$ENC\""',
"md5": '"\"$HASH\""'
}'
Pour Elasticsearch 7 (notez que seule l'URL est modifiée) :
curl -X PUT "https://user:password@host:port/ibm_file_sync/_doc/README1.md" -H 'Content-Type: application/json' -d'
{
"name": "README1.md",
"blob": '"\"$ENC\""',
"md5": '"\"$HASH\""'
}'
Vous pouvez vérifier les données téléchargées.
Pour Elasticsearch 6 :
curl https://user:password@host:port/ibm_file_sync/files/README.md?pretty
Pour Elasticsearch 7 :
curl https://user:password@host:port/ibm_file_sync/_doc/README.md?pretty
Si tout s'est correctement déroulé, les données renvoyées se présentent comme dans l'exemple (raccourci) ci-après. Le "md5 " Le champ peut contenir un nom de fichier à côté du hachage.
Pour Elasticsearch 6 :
{
"_index" : "ibm_file_sync",
"_type" : "files",
"_id" : "README1.md",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "README1.md",
"blob" : "IyBF ... KWBgCg==",
"md5" : "270f60e62d3d37add3702ced7f6969a1 README.md"
}
}
Pour Elasticsearch 7 :
{
"_index" : "ibm_file_sync",
"_id" : "README1.md",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "README1.md",
"blob" : "IyBF ... KWBgCg==",
"md5" : "270f60e62d3d37add3702ced7f6969a1 README.md"
}
}
Synchronisation des fichiers avec le disque
Une fois les fichiers téléchargés vers l'index, ils peuvent être synchronisés sur le disque. Appelez le noeud final /elasticsearch/file_syncs à partir de l'API Cloud Databases.
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/elasticsearch/file_syncs \
-H 'authorization: Bearer <token>'
region désigne la région dans laquelle se trouve votre déploiement et la partie id (nom de ressource de cloud) de l'URL doit être codée en URL. Vous trouverez plus d'informations dans la documentation de référence de l'API.
L'appel démarre et renvoie une tâche afin de vous permettre de surveiller sa progression. Une fois la tâche renvoyée terminée, le contenu de l'index est présent sur tous les noeuds de votre cluster.
N'importe quel nombre de fichiers peut être téléchargé et synchronisé. Le contenu des fichiers n'est pas validé. Assurez-vous qu'ils peuvent être traités par Elasticsearch.
Utilisation des fichiers
Elasticsearch les fonctionnalités qui utilisent des fichiers sur le système de fichiers le font en acceptant le chemin d'accès au fichier lors de la définition de l'index. Un fichier téléchargé example.txt est à /data/ibm_file_sync/current/example.txt.
Cette liste contient des exemples et n'est pas exhaustive.