[nested] nested object under path [XXX] is not of nested type这是因为在创建索引时没有指定类型为数组,这就是一个大坑,ES官方说可以不用指定数字组类型,结果不指定的聚合结果还不一样!!!
由于Elasticsearch底层使用了lucene的原因,不支持对mapping的修改,可使用索引重建的方式,升级版本的思路来做别名映射处理。 1.创建索引 创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。 my_index_v1 PUT { "settings": { "index.mapping.total_fields.limit": 2000, "number_of_shards": 5, "number_of_replicas": 1 } "mappings": { "_doc": { ... } }
2.索引复制,使用reindex api将旧索引数据导入新索引 _reindex POST { "source": { "index": "my_index", "type": "_doc" },
"dest": { "index": "my_index_v1", "type": "_doc"
} }
3.在视图确认已经创建且复制成功,然后删除原来的索引 my_index DELETE
4.创建同之前的索引的相同名称的别名,不删除索引而创建同名的别名会报错“an index exists with the same name as the alias” /_aliases PUT { "actions": [ { "add": { "alias": "my_index", "index": "my_index_v1" }} ] } 如果需要删除别名 /_aliases PUT { "actions": [ { "remove": { "alias": "my_index", "index": "my_index_v1" }} ] } 无缝切换 { "actions": [ { "remove": { "alias": "my_index", "index": "my_index_v1" }}, { "add": { "alias": "my_index", "index": "my_index_v2" }} ] }
5.查看别名 _alias GET
查看别名 http://IP地址:9201/_cat/aliases