0

我正在使用带有无痛语言的 map/reduce 功能来进行一些聚合。

map_script部分中,我试图过滤掉所有将某个字段设置为null的文档,但我无法这样做。

我已经尝试过containsKey(),但是即使我查看了基础数据并且绝大多数文档都将此字段设置为null!= null ,但对于每个文档,表达式的计算结果都为true

我无法解释这一点,但是当我汇总它时,几乎每个文档的该字段的值都被视为 0,而不是 null。但事实并非如此,因为当我查询这个字段时,我看到一堆空值。

{
    "aggs": {
        "my_agg_name": {
            "scripted_metric": {
                "combine_script": "... combine script ...",
                "map_script": "if (doc.containsKey(\"my_field\") && doc.my_field.value != null) { ... } }",
                "init_script": "... init script ...",
                "reduce_script": "... reduce script ..."
            }
        }
    },
    "size": 0
}

有谁知道发生了什么?如何使用无痛过滤掉 map/reduce 聚合中的空值?

4

1 回答 1

2

我已经想通了。doc.my_field.value显然将空值转换为0。

有效的是使用!doc.my_field.empty

于 2018-01-19T08:33:21.747 回答