ES版本:6.5.1
现在需要统计人群中做了一次、两次、三次、四次体检的人数,为了不增加应用层面的复杂度,直接在索引中存储了personId和examDate分别标识居民ID和体检日期,希望通过聚合的方式实现上述需求。
为此我增加了一个常量字段version,它的值始终为1。
1.不知道做了2次体检的总人数,只会返回size大小的结果,这里的size又不能设置得很大。
2.不能在一个操作中把做了1次、2次、3次的人数都统计出来
不知道有没有更好的方式实现类似的需求?
现在需要统计人群中做了一次、两次、三次、四次体检的人数,为了不增加应用层面的复杂度,直接在索引中存储了personId和examDate分别标识居民ID和体检日期,希望通过聚合的方式实现上述需求。
{
"query" : {
"constant_score" : {
"filter" : {
"range" : {
"examDate" : {
"gte" : 2019,
"lt" : 2020
}
}
}
}
},
"size" : 0,
"aggs" : {
"person" : {
"terms" : {
"field" : "personId"
}
}
}
}
这样确实是可以直观的看到每个人做了几次体检,但是还需要将做了一次、两次体检的结果进行分类,相当于需要对doc_count再做一次group by操作。为此我增加了一个常量字段version,它的值始终为1。
{
"query" : {
"constant_score" : {
"filter" : {
"range" : {
"examDate" : {
"gte" : 2019,
"lt" : 2020
}
}
}
}
},
"size" : 0,
"aggs" : {
"person" : {
"terms" : {
"field" : "personId"
}
,
"aggs" :{
"sum_version" : {
"sum" : {
"field" : "version"
}
},
"version_filter" : {
"bucket_selector": {
"buckets_path": {
"totalVersion": "sum_version"
},
"script": "params.totalVersion == 2"
}
}
}
}
}
}
这样做的结果是,我能查到做了2次体检的人;但是有两个缺陷:1.不知道做了2次体检的总人数,只会返回size大小的结果,这里的size又不能设置得很大。
2.不能在一个操作中把做了1次、2次、3次的人数都统计出来
不知道有没有更好的方式实现类似的需求?
0 个回复