如何更新elasticsearch字段类型

时间:2014-11-19 11:37:33

标签: node.js 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} 

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

1 个答案:

答案 0 :(得分:14)

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

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


要重新编制索引,您需要导出并重新导入数据 - 有一些工具(扫描和滚动和批量API)可以让您更轻松,请参阅reindexing your data

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