Elasticsearchのバージョンを5から6にする時の注意点

Elasticsearchのバージョン6で検証をしていた際にハマった箇所があったのでTipsにしてみました。 ※環境はAWS Elasticsearch Serviceを利用しており、バージョンは以下の通りです

                                                                                                                            [~] curl localhost:9200                                                                                                          15:47:32
{
"name" : "cg83lSz",
"cluster_name" : "******:hoge",
"cluster_uuid" : "*****",
"version" : {
"number" : "6.0.1",
"build_hash" : "********",
"build_date" : "*******",
"build_snapshot" : false,
"lucene_version" : "7.0.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

 1 indexにつき 1 type になる。

Elastic社はElasticsearchのバージョン6および7において、段階的に1つのindexにおけるtypeの数を1つに制約するようにしているようです。 今までは、1インデックスにつき、フィールドの定義が同一であれば複数のtypeが許可されていましたが、今後はできなくなっていきます。 参考 https://discuss.elastic.co/t/unable-to-create-index-with-more-that-1-type-in-6-x/106089 https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html#_schedule_for_removal_of_mapping_types 例えば、typeを2つ定義した下記のindex templateをputしようとすると、

{
"template": "hoge-*",
"mappings": {
"type_1": {
"properties": {
"@timestamp": {
"type": "date"
},
{...}
}
},
"type_2": {
"properties": {
"@timestamp": {
"type": "date"
},
{...}
}
}
}
}
curl -XPUT -H "Content-Type: application/json" "http://localhost:9200/_template/hoge" -d @hoge.json
{"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[1SrDB24][x.x.x.x:9300][indices:admin/template/put]"}],"type":"illegal_argument_exception","reason":"Rejecting mapping update to [*****] as the final mapping would have more than 1 type: [type_1, type_2]"},"status":400}%

と怒れてしまいます。  

他にも、classmethodの記事が参考になると思いますのでご覧ください 

dev.classmethod.jp