ページ

2016年2月27日土曜日

Elasticsearchを学ぶ 3 - Mapping -



今回はデータをElasticSearchにインポートする際に、どのデータがどの項目に入るか?
そのデータは数値か?日付か?などなど、データインポートする際に必要な
Mapping作業を行ってみたいと思います。

  • 環境
引き続き前回の環境を前提に進めていきたいと思います。

Mapping用のJSONファイル作成


MySQLなどで言うところのテーブルCreate用のSQLを作成するような感じだと思います。
  • 用語
Mapping Types
Index内のTypeを定義するもの。
メタ要素として_index_type_id_sourceがある。
またMappingTypes内にはフィールドとしてPropertiesを持つ。

Field datatypes
フィールドのデータタイプを定義する。
主要なものとしてstringdatelongdoublebooleanipなどがある。
JSONのフォーマットで階層を用いてobjectnestedというデータタイプもあるらしい。

サンプルとして公式ページを参考にシンプルなMappingを作成してみます。
{
  "mappings": {
    "user": { *1
      "properties": { *2
        "name":     { "type": "string"  }, *3
        "age":      { "type": "integer" }  
      }
    },
    "book": {
      "properties": {
        "title":    { "type": "string"  },
        "description":     { "type": "string"  },
        "user_id":  {
          "type":   "string",
          "index":  "not_analyzed"
        },
        "created":  {
          "type":   "date",
          "format": "strict_date_optional_time||epoch_millis"
        }
      }
    }
  }
}
一応ユーザーと、そのユーザーが所有する書籍というイメージで作成してみました^^;
*1MappingType*2がフィールド、*3がフィールドとデータタイプになります

試しにこれをuser_booksというIndexに適用させてみたいと思います。
↑のJSONファイルをmapping.jsonとして保存し、保存した場所で以下コマンド実行。
$ curl -X POST 192.168.33.180:9200/user_books -d @mapping.json
{"acknowledged":true}が返って来れば成功

早速 http://192.168.33.180:9200/_plugin/head/ にアクセスして確認してみます。
ちゃんとuser_booksというIndexが作成されていれば成功です。

テストデータ投入


試しに1件userのTypeのid=1にデータを投入してみます。
$ curl -X PUT 192.168.33.180:9200/user_books/user/1 -d '{
  "name" : "hoge",
  "age" : 20
}'
以下のようなレスポンスがあれば成功です。
{
  "_index":"user_books",
  "_type":"user",
  "_id":"1",
  "_version":1,
  "_shards":
  {
    "total":2,
    "successful":1,
    "failed":0
  },
  "created":true
}
ちゃんと登録されているか確認します。
ちゃんと登録されてますね。
今回はここまで。

0 件のコメント:

コメントを投稿