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

弹性无痛“状态”替代方案

董高畅
2023-03-14

这是我第一次尝试无痛脚本,但是几乎每个示例都使用“state”对象,这在我的版本中不可用。

"aggs": {
    "terms": {
      "scripted_metric": {
        "init_script": "state.id_map = [:]; state.sum = 0.0;",
        "map_script": """
          def id = doc['record_id.ID'].value;
          if (!state.id_map.containsKey(id)) {
            state.id_map[id] = true;
            state.sum += doc['VAL'].value;
          }
        """,
        "combine_script": """
            def sum = state.sum;
            def stats = [:];
            stats.sum = sum;
            return stats
        """,
        "reduce_script": "return states"
      }
    }
  }

导致:变量[state]未定义。

省略它也没有帮助

"init_script": "Map id_map = new HashMap(); double sum = 0.0;",
        "map_script": """
          def id = doc['record_id.ID'].value;
          if (!id_map.containsKey(id)) {
            id_map[id] = true;
            sum += doc['VAL'].value;
          }
        """,

结果为:“变量[id_map]未定义。”在map_script部分

早期版本的替代方法是什么?

共有1个答案

桑坚
2023-03-14

您上面的脚本在6.4版及更高版本中运行良好。

由于您正在运行ES 5.x,因此需要稍微更改语法:

  • 状态替换为params._agg
  • 状态替换为params._aggs

像这样:

"aggs": {
    "terms": {
      "scripted_metric": {
        "init_script": "params._agg.id_map = [:]; params._agg.sum = 0.0;",
        "map_script": """
          def id = doc['record_id.ID'].value;
          if (!params._agg.id_map.containsKey(id)) {
            params._agg.id_map[id] = true;
            params._agg.sum += doc['VAL'].value;
          }
        """,
        "combine_script": """
            def sum = params._agg.sum;
            def stats = [:];
            stats.sum = sum;
            return stats
        """,
        "reduce_script": "return params._aggs"
      }
    }
  }
 类似资料:
  • 我正在设计多租户SaaS解决方案。我读过多租户SaaS数据库租赁模式的文章,对我来说,每个租户都有数据库的多租户应用似乎是最好的选择。它看起来非常有吸引力,因为它为所有现有数据库提供了数据库管理工具。可以一次更新所有租户的数据库模式。但这是唯一的选择吗?我没有找到任何AWS或谷歌云替代弹性池。有吗? 也许有更好的解决方案为每个租户提供单独的数据库?例如,使用docker/kubernates。 谢

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

  • 当我不向其添加某些脚本但它失败并返回时,函数脚本查询工作正常 工作查询: 查询返回错误的次数最多: 任何形式的帮助都是非常感激的。 [在此处输入图像描述][1] 谢谢// [1]:https://i.stack.imgur.com/8LMRj.png**strong文本**

  • 想知道是否有人知道为什么这个查询更新运行良好,但即使任务运行到完成并声称所有记录都已更新,也不会删除任何内容?我可以使用相同的语法删除所有人员对象,而不会出现任何问题。为什么 ES 不删除对象属性? 现在,如果我使用从上述调用返回的ID观看任务 GET/_ tasks/qle uj 8 jqqgopfgse ZL 7 u 9 q:1776664 我得到了这个(简短的版本),声称所有记录都已更新。然

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

  • 我目前正在使用Elastic search 5.2,并尝试使用以下rest api执行upsert操作: > http://ip:9200/indexname/typename/id/_update Json有效载荷: } 此api执行以下操作: 1.)如果在弹性搜索中没有找到索引,则使用upsert字段中提供的json创建索引。< br> 2。)如果索引存在,那么它通过运行文档中提供的简单脚本来