在 Elasticsearch 中无痛排序
Sorting in Elasticsearch Painless
我在 groovy 脚本中有以下行,我试图将其重写为 painless -
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);
我得到的编译错误是 "Variable [a] is not defined."
看来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);
但这也有一个编译错误 - "Unknown call [sort] with [3] arguments on type [Collections]."
是否可以使用 lambda 进行无痛排序?如果是这样,那么语法是什么?另外,有没有比 https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html 更好的 painless 参考资料?
谢谢,
尼克
找到了一个描述 lambda 的页面 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);
编译。
我在 groovy 脚本中有以下行,我试图将其重写为 painless -
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);
我得到的编译错误是 "Variable [a] is not defined."
看来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);
但这也有一个编译错误 - "Unknown call [sort] with [3] arguments on type [Collections]."
是否可以使用 lambda 进行无痛排序?如果是这样,那么语法是什么?另外,有没有比 https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html 更好的 painless 参考资料?
谢谢, 尼克
找到了一个描述 lambda 的页面 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);
编译。