Elasticsearch - 按指标

时间:2016-03-08 15:59:36

标签: elasticsearch aggregate

我有以下文件:

POST index/type
{
  "profile": {
    "tracks": [
      {
        "title": "Track 1",
        "count": 5
      },
      {
        "title": "Track 2",
        "count": 3
      }
    ]
  }
}

POST index/type
{
  "profile": {
    "tracks": [
      {
        "title": "Track 2",
        "count": 8
      },
      {
        "title": "Track 3",
        "count": 1
      }
    ]
  }
}

POST index/type
{
  "profile": {
    "tracks": [
      {
        "title": "Track 4",
        "count": 20
      },
      {
        "title": "Track 5",
        "count": 1
      }
    ]
  }
}

其中" count"每个曲目项中的属性是用户播放该特定曲目的次数。

我希望按照播放次数排列一个音轨列表。因此,在上面的示例中,预期结果将是:

[
  {
    "key": "Track 4",
    "count": {
       "value": 20
    }
  },
  {
    "key": "Track 2",
    "count": {
       "value": 11
    }
  },
  {
    "key": "Track 1",
    "count": {
       "value": 5
    }
  },
  {
    "key": "Track 3",
    "count": {
       "value": 1
    }
  },
  {
    "key": "Track 5",
    "count": {
       "value": 1
    }
  }
]

我试过了:

"aggs": {
  "track_count": {
    "terms": {
        "field": "profile.tracks.title",
        "order": {
            "count": "desc"
        }
    },
    "aggs": {
        "count": {
            "sum": {
                "field": "profile.tracks.count"
            }
        }
    }
  }
}

但它似乎不正确,因为计数是通过对每个轨道项的所有其他计数属性求和来计算的。

我不知道如何构建我的聚合,以便通过对其他文档中相同轨道的计数属性求和来计算计数值。

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案