elasticsearch - 在 Elasticsearch 中无痛排序

标签 elasticsearch groovy elasticsearch-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);

我收到的编译错误是“变量 [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],类型 [Collections] 上带有 [3] 参数。”

是否可以使用 lambda 轻松排序?如果是这样,那么语法是什么?另外,还有比https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html更好的无痛引用吗? ?

谢谢, 尼克

最佳答案

找到一个无痛描述 lambda 的页面 - 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);

编译。

关于elasticsearch - 在 Elasticsearch 中无痛排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44188451/

相关文章:

java - 通过 Java API 在 Elastic Search 中创建索引

mysql - 如何进行嵌套 bool 过滤器以在elasticsearch中的同一字段上查找精确匹配的值?

java - 在 Java 中更新集合项

elasticsearch-painless - 操纵日期

elasticsearch - 如何避免 Elasticsearch 中重复的无痛脚本

elasticsearch - 尽管知道电子邮件确实存在,但是电子邮件的ES curl无法返回正确的结果

Groovy:比较 `"8"> 16` 有效, `"1 6"> 16` 抛出 ClassCastException 异常

ssl - 如何在 groovy 中使用带有自签名证书的 SSL?

java - 使用 GROOVY SQL 从 SQL SERVER 存储过程获取结果集

javascript - 在Elasticsearch中搜索别名时如何引用各个索引中的特定字段?