嵌套过滤器聚合包括doc_count中的空文档

时间:2019-02-19 08:13:06

标签: elasticsearch nested aggregation

我有一个带有以下映射的elasticsearch索引:

{
"properties":{
    "asset":{
        "properties":{
            "customerId":{
                "type":"long"
            }
        }
    },
    "software":{
        "type": "nested",
        "properties":{
            "id":{
                "type":"long"
            },
         ... (more properties)
    }
}

}

可能有些文档包含"software":null 当对软件属性(例如id)执行嵌套的过滤器聚合时,过滤器聚合中的doc_count也包括那些为空的软件。

聚合如下所示:

"aggregations": {
    "aggs": {
        "nested": {
            "path": "software"
        },
        "aggregations": {
            "filtered": {
                "filter": {
                    "term": {
                        "software.type": {
                            "value": "Application",
                            "boost": 1.0
                        }
                    }
                },
                "aggregations": {
                    "software_ids": {
                        "terms": {
                            "field": "software.id",
                            "min_doc_count": 1,
                            "shard_min_doc_count": 0
                        }
                    }
                }

            }
        }
    }
}

响应部分:

"aggregations": {
    "aggs": {
        "doc_count": 129958,
        "filtered": {
            **"doc_count": 7094,**

此doc_count包含“软件”:空 有没有办法排除它们?

编辑:我已经考虑过将“ missing”参数用于内部术语集合(即用于过滤器集合内部的集合)。但是想知道是否有办法从聚合中完全排除这种“嵌套”空值。

1 个答案:

答案 0 :(得分:1)

Missing属性用于救援。

使用Missing属性,可以指定如果缺少该字段,该字段应采用什么值。您可以将值指定为“ JUNK”,然后文档将在聚合中的JUNK存储桶中降落。

以下应立即执行。

    "aggregations": {
    "aggs": {
        "nested": {
            "path": "software"
        },
        "aggregations": {
            "filtered": {
                "filter": {
                    "term": {
                        "software.type": {
                            "value": "Application",
                            "boost": 1.0
                        }
                    }
                },
                "aggregations": {
                    "software_ids": {
                        "terms": {
                            "field": "software.id",
                            "min_doc_count": 1,
                            "shard_min_doc_count": 0,
                            "missing": "JUNK"
                        }
                    }
                }

            }
        }
    }
}