Elasticsearch聚合查询(过滤)
假如现在有这样的需求:查出2020-01-01至2020-05-01之间药店标识的聚合信息。那DSL语句该怎么写?
第一种写法
{
“from”: 0,
“size”: 0,
“query”: {"bool": {
"filter": {
"range": {
"create_time": {
"from": "2020-05-13 00:00:00",
"to": "2020-05-14 00:00:00",
"include_lower": true,
"include_upper": false,
"boost": 1
}
}
}
}
},
“aggregations”: {"aggOrganSign": {
"terms": {
"field": "organSign",
"size": 2147483647,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
}
}
}
}
即先通过query
里面的filter
进行过滤查询,然后再使用aggregations
聚合即可。其实还有一种写法。
第二种写法
{
“from”: 0,
“size”: 0,
“version”: true,
“aggregations”: {"agg_filter_create_time": {
"filter": {
"range": {
"create_time": {
"from": "2020-05-13 00:00:00",
"to": "2020-05-14 00:00:00",
"include_lower": true,
"include_upper": false,
"boost": 1
}
}
},
"aggregations": {
"aggOrganSign": {
"terms": {
"field": "organSign",
"size": 2147483647,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
}
}
}
}
}
}
也就是过滤条件写在aggregations
里面,也是先过滤时间,然后再按照药店标识聚合。
这两种执行结果是一样的,效率上也是没有差别的,其区别我也没去深究,哪位网友知道可以留言回复下。
还没有评论,来说两句吧...