Elasticsearch聚合查询(过滤)

缺乏、安全感 2023-02-26 07:25 101阅读 0赞

假如现在有这样的需求:查出2020-01-01至2020-05-01之间药店标识的聚合信息。那DSL语句该怎么写?

  • 第一种写法

    {
    “from”: 0,
    “size”: 0,
    “query”: {

    1. "bool": {
    2. "filter": {
    3. "range": {
    4. "create_time": {
    5. "from": "2020-05-13 00:00:00",
    6. "to": "2020-05-14 00:00:00",
    7. "include_lower": true,
    8. "include_upper": false,
    9. "boost": 1
    10. }
    11. }
    12. }
    13. }

    },
    “aggregations”: {

    1. "aggOrganSign": {
    2. "terms": {
    3. "field": "organSign",
    4. "size": 2147483647,
    5. "min_doc_count": 1,
    6. "shard_min_doc_count": 0,
    7. "show_term_doc_count_error": false,
    8. "order": [
    9. {
    10. "_count": "desc"
    11. },
    12. {
    13. "_key": "asc"
    14. }
    15. ]
    16. }
    17. }

    }
    }

即先通过query里面的filter进行过滤查询,然后再使用aggregations聚合即可。其实还有一种写法。

  • 第二种写法

    {
    “from”: 0,
    “size”: 0,
    “version”: true,
    “aggregations”: {

    1. "agg_filter_create_time": {
    2. "filter": {
    3. "range": {
    4. "create_time": {
    5. "from": "2020-05-13 00:00:00",
    6. "to": "2020-05-14 00:00:00",
    7. "include_lower": true,
    8. "include_upper": false,
    9. "boost": 1
    10. }
    11. }
    12. },
    13. "aggregations": {
    14. "aggOrganSign": {
    15. "terms": {
    16. "field": "organSign",
    17. "size": 2147483647,
    18. "min_doc_count": 1,
    19. "shard_min_doc_count": 0,
    20. "show_term_doc_count_error": false,
    21. "order": [
    22. {
    23. "_count": "desc"
    24. },
    25. {
    26. "_key": "asc"
    27. }
    28. ]
    29. }
    30. }
    31. }
    32. }

    }
    }

也就是过滤条件写在aggregations里面,也是先过滤时间,然后再按照药店标识聚合。

这两种执行结果是一样的,效率上也是没有差别的,其区别我也没去深究,哪位网友知道可以留言回复下。

发表评论

表情:
评论列表 (有 0 条评论,101人围观)

还没有评论,来说两句吧...

相关阅读