Painless Script Elasticsearch Watcher 问题

Issue with Painless Script Elasticsearch Watcher

我正在 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"
          }
        },

所以我在翻阅了更多文档后弄明白了。

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

 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 ];""",