可以过滤嵌套的聚合结果

时间:2018-03-07 02:42:43

标签: nested aggregation

想象一下,我有一个电影文档,其评级被建模为嵌套字段:

"mappings": {
   "movie": {
      "properties": {
          "name": {"type": "text"}
          "ratings": {
             "type": "nested"
             "properties": {
                "userId": {"type": "keyword"},
                "rating": {"type": "integer"}
             }  
          }
      }
   }
}

我想要做的是:对于给定的电影名称和用户列表' IDS。我想在这些用户中找到电影和最低评级。我设法构建一个查询来完成这项工作

{
"query": {
    "bool": {
        "must": [{
            "match": {
                "name": "fake movie name"
            }
        }],
        "filter": {
            "nested": {
                "path": "ratings",
                "query": {
                    "bool": {
                        "must": {
                            "match": {
                                "ratings.userId": ["user1", "user2"]
                            }
                        }
                    }
                }
            }
        }
    },
    "aggs": {
        "userIdFilter": {
            "filter": {
                "terms": {
                    "ratings.userId": ["user1", "user2"]
                }
            },
            "aggs": {
                "lowestRating": {
                    "min": {
                        "field": "ratings.rating"
                    }
                }
            }
        }
    }
 }
}

是否可以在最低评级上添加过滤器,只返回文件的最低评级是否低于某个值?

我希望有一种方法可以在不使用脚本的情况下解决这个问题,我尝试bucket-selector-aggregation,但无法获得正常工作的版本。有任何想法吗?

谢谢

0 个答案:

没有答案