Elasticsearch显示每个数据的相同键的总和

rn0zuynd  于 7个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(57)

任何人都可以请帮助我这个复杂的总和与elasticsearch因为我一直在寻找和尝试了好几天,但似乎没有人有同样的问题,我的.
假设我有这个样本数据:

[
    {
        "id": 4,
        "status": "draft",
        "video": {
            "platforms": [
                {
                    "names": "youtube",
                    "views": 1
                },
                {
                    "names": "dailymotion",
                    "views": 4
                }
            ]
        }
    },
    {
        "id": 2,
        "status": "published",
        "video": {
            "platforms": [
                {
                    "names": "youtube",
                    "views": 2
                },
                {
                    "names": "dailymotion",
                    "views": 10
                }
            ]
        }
    },
    {
        "id": 1,
        "status": "published",
        "video": {
            "platforms": [
                {
                    "names": "youtube",
                    "views": 5
                },
                {
                    "names": "dailymotion",
                    "views": 3
                }
            ]
        }
    }
]

字符串
这是我目前为止所知道的:

{
    "size": 0,
    "aggs": {
        "sum_views": {  
            "nested": {
                "path": "video.platforms"
            },
            "aggs": {
                "platform_terms": {
                    "terms": {
                        "field": "video.platforms.names"
                    },
                    "aggs": {
                        "platform_sum": {
                            "sum": {
                                "field": "video.platforms.views"
                            }
                        }
                    }
                }
            }
        }
    }
}


但它们只返回这个:

"aggregations": {
        "sum_views": {
            "doc_count": 3,
            "platform_terms": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                    {
                        "key": "youtube",
                        "doc_count": 3,
                        "platform_sum": {
                            "value": 8.0
                        }
                    },
                    {
                        "key": "dailymotion",
                        "doc_count": 3,
                        "platform_sum": {
                            "value": 17.0
                        }
                    }
                ]
            }
        },


我正在寻找的是如何从两个平台(单独的),在每个状态的总视图。

[
    {
        "status": "draft",
        "views": [
            {
                "names": "youtube",
                "views": 1
            },
            {
                "names": "dailymotion",
                "views": 4
            }
        ]
    },
    {
        "status": "published",
        "views": [
            {
                "names": "youtube",
                "views": 7
            },
            {
                "names": "dailymotion",
                "views": 13
            }
        ]
    }
]


所以他们对youtube和dailymotion进行求和,并按状态对它们进行分组。我尝试过从elasticsearch中进行聚合求和,但我只能分别对youtube和dailymotion中所有视图进行求和,或者对published和draft中的所有视图进行求和。我找不到如何将这两种情况合并结合起来

8wigbo56

8wigbo561#

你走在正确的道路上,你只需要首先聚合你的status字段,像这样:

{
  "size": 0,
  "aggs": {
    "status": {
      "terms": {
        "field": "status",
        "size": 10
      },
      "aggs": {
        "sum_views": {
          "nested": {
            "path": "video.platforms"
          },
          "aggs": {
            "platform_terms": {
              "terms": {
                "field": "video.platforms.names"
              },
              "aggs": {
                "platform_sum": {
                  "sum": {
                    "field": "video.platforms.views"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

字符串

相关问题