Elasticsearch使用script更新long类型的数据

项目里有人用script,更新部分字段
大概是这样的

POST sz_index_mean/_update_by_query
{
  "query": {
    "match_phrase": {
      "sz.sz_title": "Java加密技术"
    }
  },
  "script": {
    "source": "ctx._source.sz['sz_top_time'] = long类型的数据",
  }
}

long类型的数据在int类型范围内时,

"source": "ctx._source.sz['sz_top_time'] = 123"

是可以更新成功的。
然而,当long类型的数据不在int类型范围内时,

"source": "ctx._source.sz['sz_top_time'] = 1637563531010"

则报了错

"caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "Invalid int constant [1637563531010]. If you want a long constant then change it to [1637563531010L]."
    }

意思是1637563531010是一个无效的int类型常量,如果你期望一个long类型的常量应修改为1637563531010L

当我修改为

"source": "ctx._source.sz['sz_top_time'] = 1637563531010L"

时,发现更新成功了。

显然这种需要关心数据类型是否在末尾加"L"的写法是令人抓狂的,下面用params优雅地实现一下
params.top_time 代替上面直接拼接的内容

POST sz_index_mean/_update_by_query
{
  "query": {
    "match_phrase": {
      "sz.sz_title": "Java加密技术"
    }
  },
  "script": {
    "source": "ctx._source.sz['sz_top_time'] = params.top_time",
    "params": {
      "top_time": 1637563531010
    }
  }
}

嗯,也成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值