Caricamento dei file in Elasticsearch
Poche funzioni Elasticsearch consentono agli indici di leggere dai file presenti sul file system, quindi IBM Cloud® Databases for Elasticsearch consente di caricare file sulla propria distribuzione. I file sono memorizzati in una località nota e Elasticsearch è configurato in modo che sia consentito leggere file dalla località.
I file caricati sulla tua distribuzione utilizzano le risorse del disco, sia nell'indice che nel file system. Assicurati che scalda la tua distribuzione prima di caricare file.
Processo di base
- Voi base64 codificate il file sul lato client.
- Le stringhe base64 vengono memorizzate come documenti in un indice denominato
ibm_file_syncnella tua distribuzione Elasticsearch. - Si attiva un sync di file dall'API Cloud Databases.
- Tutti i nodi nel cluster Elasticsearch scaricano il contenuto del file dall'indice, decodificano il base64e ripristinano i file sul disco della distribuzione nella directory
/data/ibm_file_sync/current. - A intervalli regolari, e sui riavvii, i file vengono ridiffusi per assicurare che siano presenti su tutti i nodi.
- I file che sono su disco, ma non nell'indice, vengono cancellati. È possibile cancellare i file da disco eliminandoli dall'indice.
L'indice in Elasticsearch è ibm_file_sync.
La posizione dei file su disco è /data/ibm_file_sync/current.
In Elasticsearch 7 l'API rimuove i tipi di documenti. Per ulteriori dettagli, fai riferimento alla documentazione diElasticsearch. Questo è particolarmente bello da tenere a mente quando si aggiorna dalle versioni precedenti.
Caricamento dei file nell'Indice
La struttura dei documenti nell'indice è la seguente: name è il nome del file del file, blob è il contenuto del file base64-encoded e md5 è un valore hash opzionale sopra il contenuto del file. La mappatura
consigliata per l'indice è suddivisa in base alla versione.
Per 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"
}
}
}
}
}'
Per Elasticsearch 7 (nota la rimozione della sezione 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 è la https stringa di connessione dalla tua distribuzione.
Per utilizzare l'indice, codificare il contenuto del file come base64. Per codificare un file di esempio README.md in bash, ENC=$(base64 -w 0 README.md). Quindi, costruire una checksum sul contenuto, HASH=$(md5sum README.md).
La funzione di download confronta i valori hash su ogni esecuzione di sync e se i valori sono invariati dall'ultima sincronizzazione, non viene tentato alcun nuovo download. Se un documento nell'indice non ha alcun valore md5, tutti i download vengono tentati di nuovo.
Successivamente, caricare il documento sull'indice. Da notare che il nome del file viene fornito anche nell'URL.
Per 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\""'
}'
Per Elasticsearch 7 (nota solo l'URL viene modificato):
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\""'
}'
È possibile verificare i dati caricati.
Per Elasticsearch 6:
curl https://user:password@host:port/ibm_file_sync/files/README.md?pretty
Per Elasticsearch 7:
curl https://user:password@host:port/ibm_file_sync/_doc/README.md?pretty
Se tutto è andato liscio, i dati restituiti sembrano questo esempio (abbreviato). Il campo "md5" può contenere un nome di file accanto al hash.
Per 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"
}
}
Per Elasticsearch 7:
{
"_index" : "ibm_file_sync",
"_id" : "README1.md",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "README1.md",
"blob" : "IyBF ... KWBgCg==",
"md5" : "270f60e62d3d37add3702ced7f6969a1 README.md"
}
}
Sincronizzazione dei file su disco
Dopo che i file vengono caricati sull'indice, possono essere sincronizzati sul disco. Chiamare l'endpoint /elasticsearch/file_syncs dall'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 è la regione in cui si trova la tua distribuzione e la parte id (CRN) dell'URL deve essere urlata. Maggiori informazioni sono nel Riferimento API.
La chiamata inizia e restituisce una attività in modo da poter monitorare i suoi progressi. Dopo le finiture delle attività restituite, i contenuti nell'indice sono presenti su tutti i nodi del vostro cluster.
Qualsiasi numero di file può essere caricato e sincronizzato. Il contenuto dei file non viene convalidato. Assicurarsi che possano essere elaborati da Elasticsearch.
Utilizzo dei file
Le funzioni Elasticsearch che utilizzano i file sul file system lo fanno accettando il percorso al file quando si definisce l'indice. Un file caricato example.txt è a /data/ibm_file_sync/current/example.txt. Questo
elenco contiene esempi e non è esaustivo.