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