Elasticsearch へのファイルのアップロード
一部の Elasticsearch の機能では、ファイル・システム上のファイルから索引を読み込むことができるので、IBM Cloud® Databases for Elasticsearch でデプロイメントにファイルをアップロードすることができます。 ファイルは既知の場所に保管され、Elasticsearch はその場所からファイルを読み込むことができるように構成されています。
デプロイメントにアップロードされたファイルは、索引とファイル・システムの両方でディスク・リソースを使用します。 ファイルをアップロードする前に、デプロイメントをスケーリングしてください。
基本プロセス
- クライアント・サイドにあるファイルを base64 エンコードします。
- base64 文字列は、Elasticsearch デプロイメントで
ibm_file_sync
という名前の索引に文書として保管されます。 - Cloud Databases API からファイル同期をトリガーします。
- Elasticsearch クラスター内のすべてのノードは、ファイルの内容を索引からダウンロードし、base64 をデコードして、デプロイメントのディスク上の
/data/ibm_file_sync/current
ディレクトリーにファイルをリストアします。 - ファイルは定期的に、そして再始動時に再同期され、確実にすべてのノードにファイルが存在するようにします。
- ディスク上にあるがインデックスにないファイルは削除されます。 索引からファイルを削除することで、ディスクからファイルを削除することができます。
インデックスElasticsearchは ibm_file_sync
。
ディスク上のファイルの場所は、
/data/ibm_file_sync/current
です。
Elasticsearch 7 では、API は文書タイプを削除します。 参照 Elasticsearchドキュメンテーション詳細については。 特に、旧バージョンからの更新時にこの点について留意することをお勧めします。
索引へのファイルのアップロード
インデックス内のドキュメントの構造は次のとおりです。name
ファイルのファイル名です。blob
それはbase64-encodedファイルの内容、および md5
ファイルの内容に対するオプションのハッシュ値です。 インデックスの推奨マッピングはバージョンに基づいて分割されます。
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 の場合 (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"
}
}
}
}'
URL は、デプロイメントからの https
接続文字列です。
索引を使用するには、ファイルの内容を base64 としてエンコードします。 サンプル・ファイル README.md
を bash でエンコードするには、ENC=$(base64 -w 0 README.md)
を使用します。 その後、コンテンツに対するチェックサム HASH=$(md5sum README.md)
を作成します。
ダウンロード機能は、各同期実行時にハッシュ値を比較し、前回の同期以降に値が変更されていない場合は、新しいダウンロードは試行されません。 md5 値が存在しない文書が索引内にあると、すべてのダウンロードが再試行されます。
次に、文書を索引にアップロードします。 URL 内にもファイル名が指定されていることに注意してください。
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 の場合 (URL のみ変更されていることに注意してください):
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\""'
}'
アップロードされたデータを検証できます。
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
すべてが順調に進んだ場合は、次の例のようなデータが返されます (これは簡略化したものです)。 「md5 " フィールドには、ハッシュの横にファイル名を含めることができます。
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"
}
}
ディスクへのファイルの同期
ファイルをインデックスにアップロードした後、ディスクに同期できます。 /elasticsearch/file_syncs
エンドポイントを Cloud Databases API から呼び出します。
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/elasticsearch/file_syncs \
-H 'authorization: Bearer <token>'
region
はデプロイメントが置かれているリージョンです。URL の id
(CRN) の部分は、URL エンコードする必要があります。 詳しくは、API リファレンスを参照してください。
呼び出しが開始され、タスクが返されます。これにより、タスクの進行状況をモニターできます。 返されたタスクが終了すると、索引内の内容がクラスター内のすべてのノードに存在します。
ファイルはいくつでもアップロードおよび同期することができます。 ファイルの内容は検証されません。 Elasticsearchで処理できることを確認します。
ファイルの使用
Elasticsearchファイル システム上のファイルを使用する機能は、インデックスを定義するときにファイルへのパスを受け入れることによってこれを実行します。 アップロードされたファイル example.txt
は /data/ibm_file_sync/current/example.txt
。 このリストには例が含まれており、すべてを網羅しているわけではありません。