问题 如何更新elasticsearch字段类型


我需要更新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} 

但是状态字段的类型没有改变。请帮我这样做


7533
2017-11-19 11:37


起源



答案:


如果您有数据,则无法更改数据类型。

您必须删除索引,使用所需的数据类型创建映射,然后重新索引数据。


要重新编制索引,您需要导出并重新导入数据 - 有一些工具(扫描和滚动和批量API)可以使这更容易,请参阅 重新索引您的数据

另一种方法是创建一个新索引然后使用 别名  - 即在插入时写入最新索引(可以使用带有单个索引的别名),但在执行查询时,请从包含所有相关索引(索引的新旧版本)的别名中读取。


14
2017-11-19 12:07



感谢你的快速回复。我如何备份现有数据?所以我可以在重新索引集合后恢复备份数据。 - Dibish
我在答案中添加了更多信息。 - Olly Cruickshank


答案:


如果您有数据,则无法更改数据类型。

您必须删除索引,使用所需的数据类型创建映射,然后重新索引数据。


要重新编制索引,您需要导出并重新导入数据 - 有一些工具(扫描和滚动和批量API)可以使这更容易,请参阅 重新索引您的数据

另一种方法是创建一个新索引然后使用 别名  - 即在插入时写入最新索引(可以使用带有单个索引的别名),但在执行查询时,请从包含所有相关索引(索引的新旧版本)的别名中读取。


14
2017-11-19 12:07



感谢你的快速回复。我如何备份现有数据?所以我可以在重新索引集合后恢复备份数据。 - Dibish
我在答案中添加了更多信息。 - Olly Cruickshank