任何人都可以请帮助我这个复杂的总和与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中的所有视图进行求和。我找不到如何将这两种情况合并结合起来
1条答案
按热度按时间8wigbo561#
你走在正确的道路上,你只需要首先聚合你的
status
字段,像这样:字符串