如何更新elasticsearch字段类型

Dib*_*ish 11 node.js elasticsearch

我需要更新elasticsearch字段类型整数到long我尝试了以下方式,它不起作用

curl -XPUT 'http://localhost:9200/testwork/_mapping/message?ignore_conflicts=true' -d '
{
    "message" : {
        "properties" : {
            "status" : {"type" : "long"}
        }
    }
}
'
Run Code Online (Sandbox Code Playgroud)

在没有ignore_conflicts参数的情况下尝试时会出现错误

{"error":"MergeMappingException[Merge failed with failures {[mapper [status] of different type, current_type [integer], merged_type [long]]}]","status":400}
Run Code Online (Sandbox Code Playgroud)

但是使用ignore_conflicts参数得到响应时不会出错

{"acknowledged":true} 
Run Code Online (Sandbox Code Playgroud)

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

Oll*_*ank 14

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

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


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

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