es修改mapping字段类型

2020-05-13 宋洋葱 宋洋葱

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