【问题标题】:elasticsearch aggregation on aggregation聚合上的弹性搜索聚合
【发布时间】:2018-09-24 14:34:10
【问题描述】:

我有一些这样的索引记录:

{
 song_id: 123,
 user_id: 1000,
 date: "2018-06-04T16:01:20"
},{
 song_id: 123,
 user_id: 1000,
 date: "2018-05-03T14:21:17"
},{
 song_id: 123,
 user_id: 1001,
 date: "2018-05-25T22:54:37"
},{
 song_id: 124,
 user_id: 1001,
 date: "2018-04-25T22:54:37"
}

现在,我想用两个 user_id 作为输入进行聚合查询,聚合应该说明两个用户都下载了哪些歌曲。 我希望结果显示 song_id 123,如果我的输入是 user_id 的 10001001

通知

  • 某些歌曲可能被用户下载了两次或更多次。

@andrei-stefan

【问题讨论】:

    标签: elasticsearch dsl elasticsearch-aggregation


    【解决方案1】:
    {
      "from": 0,
      "size": 0,
      "query": {
        "bool": {
          "must": [
            {
              "bool": {
                "should": [
                  {
                    "match": {
                      "user_id": 1000
                    }
                  },
                  {
                    "match": {
                      "user_id": 1001
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      "aggs": {
        "songs": {
          "terms": {
            "size": 1000, 
            "field": "song_id",
            "order": {
              "_count": "desc"
            }
          },
          "aggs": {
            "should_we_consider": {
              "bucket_selector": {
                "buckets_path": {
                  "hits": "users._bucket_count"
                },
                "script": "params.hits == 2"
              }
            },
            "users": {
              "terms": {
                "field": "user_id"
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2019-11-08
      • 2021-02-19
      • 2023-03-18
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多