Elasticsearch の スキーマ 型 index templates メモ


Elasticsearch のインデックス・テンプレートのメモ

## インデックス・テンプレートとは

インデックスを作るときのテンプレート
インデックス名がマッチすると、そのテンプレートが適応される

## Elasticsearch 0.90 の公式ドキュメント(英語)

* [Index Templates](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html?)
* [index modules >> Mapper](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-mapper.html#index-modules-mapper)
* [Mapping](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html)
 * [Fields](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-fields.html)
 * [Types](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-types.html#mapping-types)
     * [Object Type](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-object-type.html#mapping-object-type)
* [indices apis >> Put Mapping](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-put-mapping.html)

** 

## スキーマ

スキーマ = マッピング(Elasticsearchでは)?

## ダイナミック・マッピング

スキーマレスなので、デフォルトではダイナミックに型を決める。
[Dynamic Mapping](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html)

## インデックス・テンプレートってなに?

が、新しいインデックスが作成された時に自動で適応されるテンプレートを作ることも可能。

## template

"template": "te*" は、インデックスがte*にマッチした場合に適応される。

## どんな状況か?を見る

```
$ curl -XGET 'http://localhost:9200/_cluster/state?pretty=true'
```

## 複数のテンプレートマッチング

ここは、マニュアルを参照

## 設定

* 設定の場所 (path.conf)
* config/templates/ の下$ curl -XGET 'http://localhost:9200/_cluster/state'


## インデックスの作り方

```json
POST /test
{
    "mappings": {
        "type1" : {
            "_source" : { "enabled" : false },
            "properties" : {
                "field1" : { "type" : "string", "index" : "not_analyzed" }
            }
        }
    }
}
```

成功時のレスポンス


```json
{
   "ok": true,
   "acknowledged": true
}
```


## 型の種類


[Core Types](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html)

[Object Type](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-object-type.html)


## テンプレートの参考例


以下がデータ

```json

{
    "tweet" : {
        "person" : {
            "name" : {
                "first_name" : "Shay",
                "last_name" : "Banon"
            },
            "sid" : "12345"
        },
        "message" : "This is a tweet!"
    }
}
```


以下、がマッピングの例

```
{
    "tweet" : {
        "properties" : {
            "person" : {
                "type" : "object",
                "properties" : {
                    "name" : {
                        "properties" : {
                            "first_name" : {"type" : "string"},
                            "last_name" : {"type" : "string"}
                        }
                    },
                    "sid" : {"type" : "string", "index" : "not_analyzed"}
                }
            },
            "message" : {"type" : "string"}
        }
    }
}
```

## 作られた時のレスポンス

```json
{
    ok: true
    acknowledged: true
}
```

## マッピング確認方法

```
http://localhost:9200/<インデックス名>/_mapping?pretty=1
http://localhost:9200/<インデックス名>/<タイプ名>/_mapping?pretty=1
http://localhost:9200/_all/_mapping?pretty=1
http://localhost:9200/twitter,book/_mapping?pretty=1
```


## sample

Logstash v1.2+ Elasticsearch Mapping Template
https://gist.github.com/untergeek/7359994