gpt4 book ai didi

elasticsearch - 无痛脚本Math.max更改我的数据类型

转载 作者:行者123 更新时间:2023-12-03 02:11:00 28 4
gpt4 key购买 nike

我使用 golang “github.com/olivere/elastic/v7”软件包
xx_time在我的代码中为 uint32
es映射中xx_time是
通过脚本更新后

ctx._source.xx_time = Math.max(ctx._source.xx_time, params.xx_time)
我再次得到相同的文档时出现错误
json: cannot unmarshal number 1.604394299E9 into Go struct field RiskInnerMachine.xx_time of type uint32
得到1.604394299E9而不是1604394299,得到0.0而不是0。
我想问一个问题:
  • 问题1:Math.max会更改我的数据类型吗?我什至找不到任何官方文件谈论该函数返回哪种类型以及如何使用该函数。
  • Q2:为什么数据可以保存在es中,如果Q1为true,即使数据不是长数据?
  • Q3:如果Q1为假,为什么我得到 float 数据,而其他字段不受影响?

  • 我的解决方案是
    ctx._source.xx_time = (long)Math.max(ctx._source.xx_time, params.xx_time)
    我必须手动更改类型。让我痛苦。

    最佳答案

    Q1。无痛数学函数here进行了描述,它们实际上是Java方法。即使Java为Math.max()longfloat提供了几种重载的double方法,但Painless仅为double提供了一种方法,这可能是因为所有其他类型(即longfloat)都可以转换为double
    因此,是的,如果您提供longfloat值,Math.max将始终返回double。您可以像执行此操作一样将该值转换回long,我想这并不过分。
    Q2。如果您的映射中包含long,就可以了,因为ES会将doublecoerce转换为long(默认启用)。而且,由于该值实际上代表并包含long值,因此不会丢失任何信息(即,被强制转换为1604394299的1604394299.0不会删除任何有意义的信息)。
    Q3。 --

    关于elasticsearch - 无痛脚本Math.max更改我的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64690956/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com