嵌套列表中特定元素的数量

时间:2019-04-02 09:34:10

标签: elasticsearch scripting nested elasticsearch-painless

Elastic文档的结构如下:

...
"somefield": "somevalue",
"orders": [{
        "version": 1,
        "statusCode": 1
    }, {
        "version": 1,
        "statusCode": 1
    }, {
        "version": 2,
        "statusCode": 2
    }, {
        "version": 3,
        "statusCode": 5
    }, {
        "version": 3,
        "statusCode": 6
    }
]
...

“订单” 是一个嵌套列表。我使用内联提示来计算列表的大小,如下所示:

"params._source.orders.size() < 4"

我必须添加一个条件来计算statusCode不是5而不是6的订单数量。Linq看起来像这样:

...orders.Where(o=>!(new[] {5, 6}).Contains(o.statusCode)).size()...

如何用Painless或Groovy编写脚本?

这会导致异常:

params._source.orders.count { it -> it.statusCode == 1 } < 4

1 个答案:

答案 0 :(得分:0)

我在Painless中找到了一种解决方案:

def count = 0;
for (item in params._source.orders){
if (item.statusCode != 5 && item.statusCode != 6) {
count++; }}
return count < 4;