按文档计数筛选Elasticsearch聚合结果

3

我有一个查询,用于计算每个用户的图像数量:

GET images/_search
{
 "query": {
    "bool": {
      "must": [
      {
        "term": {
           "appID.raw": "myApp"
      }
    }
  ]
 }
},
"size": 0,
"aggs": {
  "perDeviceAggregation": {
    "terms": {
       "field": "deviceID"    
    }
  }
 }
}

它基本上运行良好,但我想排除所有拥有少于200张图像的用户的聚合结果。如何调整上述查询以实现此目的?

谢谢。


你能发布你的映射和几个样本文档吗?图像存储在哪个字段中? - undefined
2个回答

8
你可以通过使用“最小文档计数”选项来实现这一点。 (了解更多)
"aggs": {
      "perDeviceAggregation": {
         "terms": {
            "field": "deviceID",
            "min_doc_count": 200
         }
      }
   }

3

使用查询子句将过滤器聚合添加到术语聚合中。 过滤器聚合

你可以像这样修改你的查询。

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "appID.raw": "myApp"
                    }
                }
            ]
        }
    },
    "size": 0,
    "aggs": {
        "filtered_users_with_images_count": {
            "filter": {
                "term": {
                    "count": 200
                }
            },
            "aggs": {
                "perDeviceAggregation": {
                    "terms": {
                        "field": "deviceID"
                    }
                }
            }
        }
    }
}

您可以修改filtered_users_with_images_count中的过滤器,以匹配具有大于200个图像的文档。

请考虑在查询中发布数据映射以支持您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接