【问题标题】:Reverse nested aggregation in date histogram ElasticSearch日期直方图中的反向嵌套聚合 ElasticSearch
【发布时间】:2022-07-13 21:37:46
【问题描述】:

我在日期直方图中组合不同级别的数据时遇到了一些问题。 弹性文档gives 一个示例有助于处理从当前嵌套级别检索直方图中的日期并且聚合使用更高级别的情况,因此reverse_nested 有帮助。但是,如果情况反映了怎么办?像聚合使用当前级别的嵌套和上层的日期生活吗?

假设我有下一个数据结构:

  {
    "_source": {
      "order_uuid": "...",
      "created_at": "...",
      "status": "...",
      "subtotal": 100,
      "items": [
        {
          "item_id": 1,
          "price": 1000,
          "units": 1,
        }
      ],
    }
  }

我希望每个项目都有带有created_at 字段的日期直方图。所以我想拥有这样的东西:

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "items": {
      "nested": {
        "path": "items"
      },
      "aggs": {
        "data": {
          "terms": {
            "field": "items.item_id"
          },
          "aggs": {
            "reversed": {
              "aggs": {
                "sales_per_day": {
                  "date_histogram": {
                    "reverse_nested": {},
                    "field": "created_at", #<- not nested
                    "calendar_interval": "day",
                    "format": "yyyy-MM-dd",
                  },
                  "aggs": {
                    "units_sum": {
                      "sum": {"field": "items.units"} #<- nested
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

这个例子显然不起作用,因为你不能在date_histogram 中使用reverse_nested(至少我不知道怎么做),但它给人的印象是我应该是什么样子。

有没有人知道如何在不重新组织映射的情况下处理它?想法受到赞赏。

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    你必须指定这样的东西。首先你指定 reverse_nested 聚合,然后在子聚合中你在你的非嵌套字段上使用 date_historgram

    {
      "size": 0,
      "query": {
        "match_all": {}
      },
      "aggs": {
        "items": {
          "nested": {
            "path": "items"
          },
          "aggs": {
            "data": {
              "terms": {
                "field": "items.item_id"
              },
              "aggs": {
                "reversed": {
                  "reverse_nested": {
                  }, 
                  "aggs": {
                    "sales_per_day": {
                      "date_histogram": {
                        "field": "created_at",
                        "calendar_interval": "day"
                      },
                      "aggs": {
                        "units_sum": {
                          "sum": {"field": "items.units"}
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2015-11-18
      相关资源
      最近更新 更多