monoblog

東京で働く会社員のブログ

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