You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch如何基于嵌套字段求和返回指定地区播放量Top视频

需求实现结论

这个需求完全可以通过Elasticsearch实现,不需要调整现有mapping的核心结构,依托嵌套字段的聚合能力即可完成统计。

实现核心逻辑

你的viewed_videos字段已经设置为nested类型,刚好满足嵌套文档独立统计的需求,整体实现步骤如下:

  • 第一步:在查询条件中筛选指定地区的viewer文档,缩小统计范围
  • 第二步:通过nested聚合进入viewed_videos嵌套文档的查询上下文
  • 第三步:按视频id做分组聚合,对每个分组内的times_viewed值做求和,再按求和结果倒序排列,取前X条即可得到目标排名
注意事项

你当前mapping中viewed_videos.id为text类型,默认不支持精确分组聚合,建议做如下优化:
给viewed_videos.id增加keyword类型的子字段,或者直接将其类型改为keyword(如果视频id为无特殊字符的唯一标识),避免分词导致的分组统计错误。如果location字段也是text类型,也需要同步增加keyword子字段用于地区筛选。

示例查询DSL

以下为查询「北京地区播放量Top10视频」的示例DSL,可根据你的实际需求调整参数:

POST /viewer/_search
{
  "size": 0, 
  "query": {
    "bool": {
      "filter": [
        {"term": {"location.keyword": "北京"}}
      ]
    }
  },
  "aggs": {
    "enter_nested_videos": {
      "nested": {
        "path": "viewed_videos"
      },
      "aggs": {
        "group_by_video_id": {
          "terms": {
            "field": "viewed_videos.id.keyword",
            "size": 10,
            "order": {"sum_play_count": "desc"}
          },
          "aggs": {
            "sum_play_count": {
              "sum": {"field": "viewed_videos.times_viewed"}
            }
          }
        }
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者wonderv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:04