首页 > 解决方案 > 使用 group by channel id 获取最大值和最小值

问题描述

我想使用按频道 ID 分组来获取最大值和最小值,并且还想获取最大视频 ID 和最小视频 ID

 {

  "query": {
    "term": {
      "channel_id.keyword": {
        "value": "UCQOd1f6pYldvhgvdQ_ktpGA"
      }
    }
  },
  "aggs": {
    "views_max": {
      "max": {
        "field": "views",
        "missing": 0
      },
      "_source":["video_id","views"]
    },
     "views_min": {
      "min": {
        "field": "views",
        "missing": 0
      },
       "_source":["video_id","views"]
    }
  }
}

标签: elasticsearchelasticsearch-aggregationelasticsearch-query

解决方案


{
  "aggs": {
    "2": {
      "terms": {
        "field": "channel_id.keyword",
        "order": {
          "1": "desc"
        },
        "size": 10
      },
      "aggs": {
        "1": {
          "max": {
            "field": "video_id"
          }
        },
        "3": {
          "min": {
            "field": "video_id"
          }
        }
      }
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  },
  "query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "channel_id.keyword": "UCQOd1f6pYldvhgvdQ_ktpGA"
                }
              }
            ],
            "minimum_should_match": 1
          }
        }
      ]
    }
  }
}

上述查询将给出特定 channel_id 的 video_id 的最大值和最小值。

{
  "aggs": {
    "2": {
      "terms": {
        "field": "channel_id.keyword",
        "order": {
          "1": "desc"
        },
        "size": 10
      },
      "aggs": {
        "1": {
          "max": {
            "field": "video_id"
          }
        },
        "3": {
          "min": {
            "field": "video_id"
          }
        }
      }
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  }
}

通过上述查询,您将能够获取所有不同的 channel_id 其各自的最大和最小 video_id


推荐阅读