【问题标题】:Elasticsearch - add normal field filter to nested field aggregationElasticsearch - 将普通字段过滤器添加到嵌套字段聚合
【发布时间】:2021-11-06 21:16:45
【问题描述】:

我在 ES 中有如下文档结构:

{
  customer_id: 1,
  is_member: true,
  purchases: [
    {
      pur_id: 1,
      pur_channel_id: 1,
      pur_amount: 100.00,
      pur_date: '2021-08-01'
    },
    {
      pur_id: 2,
      pur_channel_id: 2,
      pur_amount: 100.00,
      pur_date: '2021-08-02'
    }
  ]
},
{
  customer_id: 2,
  is_member: false,
  purchases: [
    {
      pur_id: 3,
      pur_channel_id: 1,
      pur_amount: 200.00,
      pur_date: '2021-07-01'
    },
    {
      pur_id: 4,
      pur_channel_id: 3,
      pur_amount: 300.00,
      pur_date: '2021-07-02'
    }
  ]
}

我想通过 purchase.pur_channel_id 聚合总和,并且对于每个子聚合,我想在包含“is_member=false”的文档上添加子聚合聚合,因此,我编写了以下查询:

{ 
  "size": 0,
  "query": {
     "match_all": {}
   }
 },
"aggs": {
  "purchases": {
    "nested": {
      "path": "purchases"
    },
    "aggs": {
       "pur_channel_id": {
         "terms": {
           "field": "purchases.pur_channel_id",
           "size": 10
         },
         "aggs": {
           "none_member": {
             "filter": {
               "term": {
                 "is_member": false
               }
             },
             "aggs": {
               "none_member_amount": {
                 "sum": {
                   "field": "purchases.pur_amount"
                 }
               }
             }
           },
           "aggs": {
             "pur_channel_amount": {
               "sum": {
                   "field": "purchases.pur_amount"
               }    
             }
           }
         }
       }
    }
  }
}

查询运行成功,而我为所有“none_member_amount”得到 0。我想知道可能无法在嵌套聚合中添加普通字段。

请帮忙!谢谢。

【问题讨论】:

    标签: elasticsearch aggregation


    【解决方案1】:

    嵌套聚合在嵌套块级别运行,因此您的查询是在嵌套文档中搜索 is_member 字段。要重新加入父文档,您需要使用 reverse nested aggregation 或者您可以使用过滤聚合在嵌套聚合之前移动 is_member 检查。

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2015-07-30
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多