es修改mapping字段类型
es首次创建设置mapping请参考教程elasticsearch简单入门教程
上篇文章创建mapping时忘了给source1、source2字段设置type,数据入es时它自动给设置成了text类型。
es不支持对已有数据的字段修改type,只能通过重新创建一个新的index,然后把旧index的数据拷贝过来。
以下是Es修改mapping字段的间接方法。
先创建一个新的index
PUT /wd-analytics-v2
{
"settings" : {
"index" : {
"number_of_shards": 5,
"number_of_replicas" : 2
}
},
"mappings" : {
"properties" : {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH"
},
"source1": {"type": "keyword"},
"source2": {"type": "keyword"},
"keywords": {"type": "keyword"},
"mood":{"type":"short"},
"comment":{"type":"short"},
"category":{"type":"short"}
}
}
}
然后把原来指向v1的alis改成指向v2,
POST /_aliases
{
"actions": [
{ "remove": {
"alias": "wd-analytics",
"index": "wd-analytics-v1"
}},
{ "add": {
"alias": "wd-analytics",
"index": "wd-analytics-v2"
}}
]
}
然后把旧的数据重新复制到新的索引上,数据量大的话记得加上wait_for_completion=false参数。
POST _reindex?wait_for_completion=false
{
"source": {
"index": "wd-analytics"
},
"dest": {
"index": "wd-analytics1"
}
}
最后在es里删除旧的索引
DELETE /wd-analytics-v1