【问题标题】:Elasticsearch Nested output buckets’ aggregationElasticsearch 嵌套输出桶的聚合
【发布时间】:2016-03-29 10:50:03
【问题描述】:

这是我的文档类型:车辆是嵌套类型。

文档1 -

{
  "customerAge": 30,
  "vehicles": [
    {
      "brand": "Altima",
      "year": 2005
    },
    {
      "brand": "Corolla",
      "year": 2006
    },
    {
      "brand": "Camry",
      "year": 2005
    }
  ]
}

文档2-

{
  "customerAge": 50,
  "vehicles": [
    {
      "brand": "Altima",
      "year": 2009
    },
    {
      "brand": "Corolla",
      "year": 2010
    }
  ]
}

我正在尝试创建汽车品牌桶并计算客户年龄的平均值。因此,在本例中,“Altima”存储桶的平均客户年龄为 40 岁。

我试过这个查询,平均值为空。

有人可以帮助我做错了什么吗?

{
   "size": 0,
   "aggs": {
      "nestedtop": {
         "nested": {
            "path": "vehicles"
         },
         "aggs": {
            "3cc601456260531278": {
               "terms": {
                  "field": "vehicles.brand"
               },
               "aggs": {
                  "expfilter_yromb0g90dmjx20529": {
                     "filter": {
                        "match_all": {}
                     },
                     "aggs": {
                        "yromb0g90dmjx20529": {
                           "min": {
                              "field": "customerAge"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    嵌套聚合只能访问嵌套文档中的字段。它看不到根文档或不同嵌套文档中的字段。但是,我们可以使用reverse_nested aggregation 退出嵌套范围回到父级。

    {
        "size": 0,
        "aggs": {
            "nestedtop": {
                "nested": {
                    "path": "vehicles"
                },
                "aggs": {
                    "by_name": {
                        "terms": {
                            "field": "vehicles.brand"
                        },
                        "aggs": {
                            "age_reverse": {
                                "reverse_nested": {},
                                "aggs": {
                                    "avg_age": {
                                        "avg": {
                                            "field": "customerAge"
                                        }
                                    }
                                }
                            }
                        }
    
                    }
                }
            }
        }
    }
    

    【讨论】:

    • reverse_nested 操作成本高吗?
    • 我不这么认为。它只是将嵌套范围更改为父文档
    猜你喜欢
    • 2017-04-15
    • 2023-03-17
    • 2021-12-14
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多