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

  1. Voi base64 codificate il file sul lato client.
  2. Le stringhe base64 vengono memorizzate come documenti in un indice denominato ibm_file_sync nella tua distribuzione Elasticsearch.
  3. Si attiva un sync di file dall'API Cloud Databases.
  4. 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.
  5. A intervalli regolari, e sui riavvii, i file vengono ridiffusi per assicurare che siano presenti su tutti i nodi.
  6. 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.