我需要将elasticsearch字段类型整数更新为long我尝试了以下方式并且它不起作用
curl -XPUT 'http://localhost:9200/testwork/_mapping/message?ignore_conflicts=true' -d '
{
"message" : {
"properties" : {
"status" : {"type" : "long"}
}
}
}
'
如果尝试没有ignore_conflicts参数,则会收到类似
的错误{"error":"MergeMappingException[Merge failed with failures {[mapper [status] of different type, current_type [integer], merged_type [long]]}]","status":400}
但是在使用ignore_conflicts参数时没有得到错误得到了像
这样的响应{"acknowledged":true}
但是状态字段的类型没有改变。请帮我这样做
答案 0 :(得分:14)
如果您有数据,则无法更改数据类型。
您必须删除索引,使用所需的数据类型创建映射,然后重新索引数据。
要重新编制索引,您需要导出并重新导入数据 - 有一些工具(扫描和滚动和批量API)可以让您更轻松,请参阅reindexing your data。
另一种方法是创建一个新索引,然后使用aliasing - 即在插入时写入最新索引(可以使用带有单个索引的别名),但在执行查询时,请阅读来自包含所有相关索引(索引的新旧版本)的别名。