具有长类型的弹性搜索无痛脚本问题

时间:2017-05-01 19:53:55

标签: elasticsearch elasticsearch-5 elasticsearch-painless

  

我目前正在使用Elastic search 5.2并尝试执行 upsert   使用以下休息api进行操作:

这个api做了以下事情:

1。)如果在弹性搜索中找不到索引,则在upsert字段内提供json的索引。
2.)如果索引存在,则它通过运行文档中提供的无痛脚本来执行部分更新。

问题:
我已经为计数器创建了弹性搜索索引映射。

这个更新工作正常,直到计数器值在整数范围内。(即)2,147,483,647

1 个答案:

答案 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