【问题标题】:Aggregation of fields inside nested type field嵌套类型字段内的字段聚合
【发布时间】:2018-05-21 13:42:22
【问题描述】:

我想聚合位于 nested 类型字段内的 keyword 类型字段。嵌套字段的映射如下:

"Nested_field" : {
    "type" : "nested",
    "properties" : {
        "Keyword_field" : {
            "type" : "keyword"
        }
    }
}

我用来聚合的查询部分如下:

"aggregations": {
    "Nested_field": {
        "aggregations": {
            "Keyword_field": {
                "terms": {
                    "field": "Nested_field.Keyword_field"
                }
            }
        },
        "filter": {
            "bool": {}
        }
    },
}

但这并没有返回正确的聚合。即使有 Keyword_field 值现有文档,查询返回 0 个桶。所以,我的聚合查询有问题。谁能帮我找出问题所在?

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation elasticsearch-mapping


    【解决方案1】:

    我认为您需要在其中提供嵌套路径。这在 ES 5 中有效,但看起来你使用的是基于“聚合”与“聚合”的 6,所以如果它不起作用,请告诉我,我会放弃这个答案。试试这个:

    {
        "aggregations": {
            "nested_level": {
                "nested": {
                    "path": "Nested_field"
                },
                "aggregations": {
                    "keyword_field": {
                        "terms": {
                            "field": "Nested_field.Keyword_field"
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 哇!!它奏效了......不过有一个问题:聚合嵌套字段是否需要大量堆内存?
    • 我不太确定这个。嵌套字段实际上存储为单独的文档,您通过添加 "nested" 节点所做的事情是告诉它如何/在哪里查找这些单独的文档。我想它不会比普通聚合占用更多的内存。我想有一个额外的步骤可以将嵌套文档加入到父文档中,所以它看起来像一个大文档,就像你索引它的方式一样;除此之外,我认为不会增加太多开销。
    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多