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

无痛脚本弹性搜索观察器的问题

鲁涵映
2023-03-14

我在elasticsearch中创建了一个观察器,当我们在索引中10分钟没有新条目或事件时,它会报告,这可以通过查看条目中的源字段来进一步划分。

我只得到了索引的最后10分钟,并查看了桶中不存在哪个源。

为此,我首先创建我们收到的所有源类型的列表,然后从返回的存储桶键创建一个列表。然后,我想比较列表以查看缺少哪个列表,然后将其传递到消息中。

我在for循环中遇到了一个通用错误。任何反馈对弹性和无痛都很有帮助,所以可能是我错过的简单的东西。

"transform": {
          "script": {
            "source": """String vMessage = 'Clickstream data has been loaded although there are no iovation records from the following source in the last 10 mins:

';if(ctx.payload.clickstream.hits.total > 0 && ctx.payload.iovation.aggregations.source.buckets.size() < 3) { source_list = ['wintech', 'login', 'clickstream']; source_array = new String[] for (source in ctx.payload.iovation.aggregations.source.buckets){ source_array.add(source.key);  } for (key in source_list){ if (!source_array.contains(key){ vMessage += '<ul><li>' + key + '</li></ul>';}  } }return [ 'message': vMessage ];""",
            "lang": "painless"
          }
        },

共有1个答案

邵捷
2023-03-14

所以我在挖掘了更多的文档后发现了这一点。

我错误地声明了我的列表。要声明列表,它需要采用如下格式。

 List new_list = new ArrayList();

这解决了我的问题,现在转换脚本按预期工作。

"""String vMessage = 'Clickstream data has been loaded although there are no iovation records from the following source in the last 10 mins:

';if(ctx.payload.clickstream.hits.total > 0 && ctx.payload.iovation.aggregations.source.buckets.size() < 3) { List source_list = new ArrayList(['wintech', 'login', 'clickstream']); List source_array = new ArrayList(); for (source in ctx.payload.iovation.aggregations.source.buckets){ source_array.add(source.key);  } for (key in source_list){ if (!source_array.contains(key)){ vMessage += '<ul><li>' + key + '</li></ul>';}  } }return [ 'message': vMessage ];""",
 类似资料:
  • 我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?

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

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

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

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

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