2

我在一个 groovy 脚本中有以下行,我正试图将其重写为无痛 -

def buckets = ctx.payload.aggregations.metrics.buckets.sort(a,b -> a.largest_surprise.value == b.largest_surprise.value ? 0 : a.largest_surprise.value < b.largest_surprise.value ? -1 : 1);

我得到的编译错误是“未定义变量 [a]”。

看起来 painless 支持 Java 中的 Collections.sort 方法,所以我尝试了 -

Collections.sort(ctx.payload.aggregations.metrics.buckets, a,b -> a.largest_surprise.value == b.largest_surprise.value ? 0 : a.largest_surprise.value < b.largest_surprise.value ? -1 : 1);

但这也有一个编译错误 - “未知调用 [sort] 与 [3] 类型 [Collections] 的参数。”

是否可以使用 lambda 进行无痛排序?如果是这样,那么语法是什么?此外,有没有比https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html更好的无痛参考?

谢谢,尼克

4

1 回答 1

2

找到了一个描述 lambdas in painless 的页面 - https://www.elastic.co/guide/en/elasticsearch/reference/5.4/modules-scripting-painless-syntax.html#painless-lambda-expressions

我想我错过了围绕“a,b”的括号

def buckets = ctx.payload.aggregations.metrics.buckets.sort((a,b) -> a.largest_surprise.value == b.largest_surprise.value ? 0 : a.largest_surprise.value < b.largest_surprise.value ? -1 : 1);

编译。

于 2017-05-25T20:53:40.403 回答