过滤掉空字段

Filter out null fields

我正在使用 map/reduce 功能和无痛语言来做一些聚合。

map_script 部分,我试图过滤掉所有将某个字段设置为 null 的文档,但是我做不到。

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

我无法解释这一点,但它的行为是因为几乎每个文档的该字段值在我聚合时都被视为 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
}

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

我已经弄明白了。 doc.my_field.value 显然将空值转换为 0。

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