Elasticsearchにサンプルのデータセット(ドキュメント1000件)をbulk APIを使って登録する

Elasticsearchにサンプルのデータセット(ドキュメント1000件)をbulk APIを使って登録する方法を記す。

公式ドキュメント Exploring Your Data を参考にした。
www.elastic.co

検証環境: Elasticsearch 6.0.0-rc1

公式でJSONのサンプルデータが用意されている。
https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json

このサンプルデータは仮想的に銀行口座のユーザ情報を用意したものだ。ドキュメントは1000件あり、各ドキュメントの詳しいスキーマは以下の通りになっている。

{
    "account_number": 0,
    "balance": 16623,
    "firstname": "Bradshaw",
    "lastname": "Mckenzie",
    "age": 29,
    "gender": "F",
    "address": "244 Columbus Place",
    "employer": "Euron",
    "email": "bradshawmckenzie@euron.com",
    "city": "Hobucken",
    "state": "CO"
}

先程のサンプルデータが表示されたページ( https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json)のデータをaccounts.jsonとしてElasticsearch 6.0.0-rc1のフォルダの中にダウンロードする。

以下のコマンドを入植しaccount.jsonをElasticsearchに投入する。
このとき現在作業しているディレクトリがElasticsearchのフォルダの中ではないと、Warning: Couldn't read data from file "accounts.json", this makes an empty のようなエラーが表示される。

bash-3.2$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
Warning: Couldn't read data from file "accounts.json", this makes an empty 
Warning: POST.
{
  "error" : {
    "root_cause" : [
      {
        "type" : "parse_exception",
        "reason" : "request body is required"
      }
    ],
    "type" : "parse_exception",
    "reason" : "request body is required"
  },
  "status" : 400
}
bash-3.2$ pwd
/Users/sakura818uuu
bash-3.2$ cd elasticsearch-6.0.0-rc1/
bash-3.2$ pwd
/Users/sakura818uuu/elasticsearch-6.0.0-rc1
bash-3.2$ ls
LICENSE.txt README.textile  bin     data        logs        plugins
NOTICE.txt  accounts.json   config      lib     modules
bash-3.2$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
{
  "took" : 1085,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "1",
        "_version" : 1,
        "result" : "created",
        "forced_refresh" : true,
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "6",
        "_version" : 1,
        "result" : "created",
        "forced_refresh" : true,
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "13",
        "_version" : 1,
        "result" : "created",
        "forced_refresh" : true,
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1,
        "_primary_term" : 1,
        "status" : 201
      }
    },

(以下省略)

bash-3.2$ curl 'localhost:9200/_cat/indices?v'
health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   customer tl6qvdROTfuL380eLOxH0Q   5   1          2            0      8.3kb          8.3kb
yellow open   bank     yaVaZLiLT2G0RyA-vBn5nw   5   1       1000            0    488.3kb        488.3kb

これで1000件のサンプルデータをbulk APIを使って一括で登録することが出来た。