我的性别数据包含男性,女性,未知
我想知道以下查询之间的区别。如何计算
{
"aggs" : {
"data" : {
"filter" : { "term": { "gender": "male" } },
"aggs" : {
"data_aggs" : {
"terms" : {
"field" : "gender"
}
}
}
}
}}
并且
{
"aggs" :{
"data" : {
"terms" :{
"field" :"gender",
"include" : "male"
}
}
}}
答案 0 :(得分:4)
在您的第一个聚合中,过滤器将仅选择gender
字段正好为male
的文档子集。然后,您的data
聚合将在所选文档上 运行。
您的第二个聚合将在所有您的查询匹配的文档上运行,然后terms
聚合将仅返回其键匹配male
的存储桶。
在第一种情况下,聚合预先过滤 运行之前的数据。在第二种情况下,聚合正在过滤数据即时,但它将适用于所有文档,因为它必须检索所有文档中的gender
字段以了解是否性别价值需要汇总与否。毫无疑问,第一个聚合应该比第二个聚合更高效,特别是如果你的文档库很大。