我目前正在使用Elastic search 5.2并尝试执行 upsert 使用以下休息api进行操作:
http://ip:9200/indexname/typename/id/_update
Json Payload:
{
"script" : {
"inline": "ctx._source.size +=params.size",
"lang": "painless",
"params" :{
"size" : 14889114000
}
},
"upsert" : {
"size" : 1488911400
}
}
这个api做了以下事情:
1。)如果在弹性搜索中找不到索引,则在upsert字段内提供json的索引。
2.)如果索引存在,则它通过运行文档中提供的无痛脚本来执行部分更新。
问题:
我已经为计数器创建了弹性搜索索引映射。
这个更新工作正常,直到计数器值在整数范围内。(即)2,147,483,647
答案 0 :(得分:1)
您只需稍微修改脚本,而不是使用+=
运算符。如果您将脚本修改为ctx._source.size = ctx._source.size + params.size
而不是ctx._source.size += params.size
,那么它将按您的预期运行:
POST indexname/typename/id/_update
{
"script" : {
"inline": "ctx._source.size = ctx._source.size + params.size",
"lang": "painless",
"params" :{
"size" : 14889114000
}
},
"upsert" : {
"size" : 1488911400
}
}
首先,文档将与size: 1488911400
一起插入,然后在第二次更新时,它将包含size: 16378025400
的值1488911400 + 14889114000