IBM Cloud Docs
Dateien in Elasticsearch hochladen

Dateien in Elasticsearch hochladen

Einige Elasticsearch-Features implementieren Indizes zum Lesen aus Dateien im Dateisystem, sodass Sie mit IBM Cloud® Databases for Elasticsearch Dateien in Ihre Bereitstellung hochladen können. Die Dateien werden an einer bekannten Position gespeichert und Elasticsearch ist so konfiguriert, dass es zulässig ist, Dateien aus dieser Position zu lesen.

Dateien, die in Ihre Bereitstellung hochgeladen werden, verwenden Plattenressourcen, und zwar sowohl im Index als auch im Dateisystem. Stellen Sie daher sicher, dass Sie vor dem Hochladen von Dateien Ihre Bereitstellung entsprechend skalieren.

Grundlegender Prozess

  1. Mit Base64 wird die Datei auf der Clientseite codiert.
  2. Die Base64-Zeichenfolgen werden als Dokumente in einem Index mit dem Namen ibm_file_sync in Ihrer Elasticsearch-Bereitstellung gespeichert.
  3. Sie lösen eine Dateisynchronisation über die Cloud Databases-API aus.
  4. Alle Knoten in Ihrem Elasticsearch-Cluster laden den Dateiinhalt aus dem Index herunter, entschlüsseln die Base64-Codierung und stellen die Dateien auf der Platte der Bereitstellung im Verzeichnis /data/ibm_file_sync/current wieder her.
  5. In regelmäßigen Abständen und bei Neustarts werden die Dateien erneut synchronisiert um sicherzustellen, dass sie auf allen Knoten vorhanden sind.
  6. Dateien, die sich auf der Festplatte, aber nicht im Index befinden, werden gelöscht. Sie können Dateien von der Platte löschen, indem Sie sie aus dem Index entfernen.

Der Index inElasticsearch Ist ibm_file_sync.
Die Position der Dateien auf der Platte ist /data/ibm_file_sync/current.

In Elasticsearch 7 entfernt die API Dokumenttypen. Weitere Informationen finden Sie im Elasticsearch Dokumentation für mehr Details. Dies ist insbesondere bei Updates von früheren Versionen zu beachten.

Dateien in den Index hochladen

Die Struktur der Dokumente im Index ist wie folgt:name ist der Dateiname der Datei,blob ist derbase64-encoded Dateiinhalte und md5 ist ein optionaler Hashwert über den Dateiinhalt. Die empfohlene Zuordnung für den Index ist nach Version aufgeteilt.

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"
                }
            }
        }
    }
}'

Elasticsearch 7 (Beachten Sie, dass der Abschnitt files entfernt wurde):

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"
      }
    }
  }
}'

Die URL ist die https-Verbindungszeichenfolge aus Ihrer Bereitstellung.

Um den Index zu verwenden, codieren Sie den Dateiinhalt als Base64. Codieren Sie eine Beispieldatei README.md folgendermaßen in Bash: ENC=$(base64 -w 0 README.md). Erstellen Sie dann eine Kontrollsumme über den Inhalt: HASH=$(md5sum README.md).

Die Download-Funktion vergleicht bei jedem Synchronisierungslauf die Hashwerte und wenn die Werte seit der letzten Synchronisierung unverändert sind, wird kein neuer Downloadversuch unternommen. Wenn ein Dokument im Index keinen 'md5'-Wert hat, werden alle Downloads erneut versucht.

Laden Sie das Dokument als Nächstes in den Index hoch. Beachten Sie, dass der Dateiname auch in der URL angegeben wird.

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\""'
}'

Elasticsearch 7 (Beachten Sie, dass hier nur die URL geändert ist):

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\""'
}'

Sie können die hochgeladenen Daten überprüfen.

Elasticsearch 6:

curl https://user:password@host:port/ibm_file_sync/files/README.md?pretty

Elasticsearch 7:

curl https://user:password@host:port/ibm_file_sync/_doc/README.md?pretty

Wenn alles reibungslos verlaufen ist, sehen die zurückgegebenen Daten wie dieses (verkürzte) Beispiel aus. Der "md5 "-Feld kann neben dem Hash einen Dateinamen enthalten.

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"
  }
}

Elasticsearch 7:

{
  "_index" : "ibm_file_sync",
  "_id" : "README1.md",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "name" : "README1.md",
    "blob" : "IyBF ... KWBgCg==",
    "md5" : "270f60e62d3d37add3702ced7f6969a1  README.md"
  }
}

Dateien mit der Platte synchronisieren

Nachdem die Dateien in den Index hochgeladen wurden, können sie mit der Festplatte synchronisiert werden. Rufen Sie den Endpunkt /elasticsearch/file_syncs über die Cloud Databases-API auf.

curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/elasticsearch/file_syncs \
-H 'authorization: Bearer <token>'

Dabei ist region die Region, in der sich Ihre Bereitstellung befindet, und der id-Teil (CRN) der URL muss URL-codiert sein. Weitere Informationen finden Sie in der API-Referenz.

Der Aufruf wird gestartet und gibt eine Task zurück, damit Sie ihren Fortschritt überwachen können. Nachdem die zurückgegebene Task beendet wurde, sind die Inhalte im Index auf allen Knoten in Ihrem Cluster vorhanden.

Es können beliebig viele Dateien hochgeladen und synchronisiert werden. Der Inhalt der Dateien wird nicht geprüft. Stellen Sie sicher, dass sie von Elasticsearchverarbeitet werden können.

Dateien verwenden

Elasticsearch Funktionen, die Dateien im Dateisystem verwenden, tun dies, indem sie beim Definieren des Indexes den Pfad zur Datei akzeptieren. Eine hochgeladene Datei example.txt ist bei /data/ibm_file_sync/current/example.txt. Diese Liste enthält Beispiele und ist nicht vollständig.