当前位置: 首页 > 知识库问答 >
问题:

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

孙翰墨
2023-03-14

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

>

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

    Json有效载荷:

    {
    "script" : {
        "inline": "ctx._source.size +=params.size",
        "lang": "painless",
        "params" :{
        "size" : 14889114000
        }
    },
    "upsert" : {
        "size" : 1488911400
    }
    

    }

    此api执行以下操作:

    1.)如果在弹性搜索中没有找到索引,则使用upsert字段中提供的json创建索引。< br> 2。)如果索引存在,那么它通过运行文档中提供的简单脚本来执行部分更新。

    问题:< br >我已经为计数器创建了弹性搜索索引映射。< br>
    此更新工作正常,直到计数器值在整数范围内。(即2,147,483,647
    超过此值,它溢出并变成负值,在预期值为正long值的情况下(因为对应的索引映射为long)。有没有办法在使用无痛脚本的同时解决这个int溢出问题?

  • 共有1个答案

    严心水
    2023-03-14

    您只需稍微修改脚本,而不使用<code>=而不是ctx._source。大小=参数。大小,则它将按您的预期工作:

    POST indexname/typename/id/_update
    {
      "script" : {
        "inline": "ctx._source.size = ctx._source.size + params.size",
        "lang": "painless",
        "params" :{
          "size" : 14889114000
        }
      },
      "upsert" : {
        "size" : 1488911400
      }
    }
    

    首先,文档将以<code>大小:1488911400

     类似资料:
    • 我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?

    • 我在elasticsearch中创建了一个观察器,当我们在索引中10分钟没有新条目或事件时,它会报告,这可以通过查看条目中的源字段来进一步划分。 我只得到了索引的最后10分钟,并查看了桶中不存在哪个源。 为此,我首先创建我们收到的所有源类型的列表,然后从返回的存储桶键创建一个列表。然后,我想比较列表以查看缺少哪个列表,然后将其传递到消息中。 我在for循环中遇到了一个通用错误。任何反馈对弹性和无痛

    • 我想将地理信息的旧数据重新索引到地理点。 以前的数据包含这种格式的位置。 我想像这样在数组中的地理点中重新索引位置 这是映射 这是我执行重新索引的请求。 问题它没有覆盖位置:{} 到位置:[]

    • 我有一个弹性查询脚本,用于使用我给出的参数计算地面距离,我必须在多个查询中使用它。是否有一种方法可以避免这种重复,例如,有一种计算全局变量并在所有脚本中使用它的方法。在本例中,我希望计算<code>距离 映射:

    • 我使用的是 ES 版本 7.0。我有一个商店索引,其中有空闲时间(开放和关闭时间)在UTC时间。我在 Integer 中存储了时间,以便它可以轻松地与无痛脚本中的当前时间匹配。 下面是一个示例文档: 下面是使用无痛脚本的查询: 上述查询适用于星期三的时间300,结果中给出了上述文档,但不适用于星期四的时间1400。看起来脚本总是匹配可用性数组中的第一个值。 我还试图循环浏览可用性日,但这并没有给我

    • 你能建议如何更新基于条件字段的文档(使用脚本-我猜是无痛的)吗? 其目的是添加/删除文档中的值 所以如果我有这些输入文档: 我想表演这样的东西: 使用以下命令更新具有“flag=true”的所有文档: 添加标签:"me","one" 已删除标签:“goo”、“foo” 所以预期结果应该是这样的: