elasticsearch - 长类型的 Elasticsearch 无痛脚本问题

标签 elasticsearch elasticsearch-5 elasticsearch-painless

I am currently using Elastic search 5.2 and trying to perform upsert operation using the following rest api:


  • http://ip:9200/indexname/typename/id/_update

    杰森有效载荷:
    {
    "script" : {
        "inline": "ctx._source.size +=params.size",
        "lang": "painless",
        "params" :{
        "size" : 14889114000
        }
    },
    "upsert" : {
        "size" : 1488911400
    }
    


  • 此api执行以下操作:

    1.)如果在 flex 搜索中未找到索引,则使用upsert字段内提供的json创建一个索引。
    2.)如果索引存在,则它将通过运行文档中提供的简单脚本来执行部分更新。

    问题:我为计数器创建了 flex 搜索索引映射,直到计数器值在整数范围内为止,该更新工作正常。(即)2,147,483,647超出此值,它将溢出并变为负值,以防出现预期值它是正的long值(因为相应的索引图很长)。有没有办法使用无痛脚本来解决此int溢出问题?

    最佳答案

    您只需要稍微修改一下脚本,而无需使用+=运算符。如果您将脚本修改为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: 163780254001488911400 + 14889114000

    关于elasticsearch - 长类型的 Elasticsearch 无痛脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725530/

    相关文章:

    elasticsearch - 删除具有特定属性值的所有文档?

    elasticsearch - 从/usr/local/var卸载elasticsearch并在MacOSX上安装另一个版本

    Elasticsearch 5 - 文本/关键字字段中不区分大小写的精确匹配

    elasticsearch - 聚合任务如何从Elasticsearch中的反向索引中受益

    elasticsearch - 将持续时间转换为总毫秒数

    php - Elasticsearch Not 运算符不起作用

    elasticsearch - Elasticsearch 过滤器

    elasticsearch - 如何在同一请求中使用不同的查询词查询两个不同的字段。 ElasticSearch 5.x

    php - 在嵌套属性ElasticSearch中添加和删除对象

    Elasticsearch 无痛 : Error when using three quotes: Unexpected Character ('\"' (code 34))