es统计有多少个分组_ElasticSearch 分组查询的几个例子

facets接口可以根据query返回统计数据,其中的 terms_stats 是分组统计,根据key的情况返回value的统计数据,类似group by的意思。

"terms_stats" : { "key_field" : "", "value_field" : "" }

例子:查询每个ip的请求执行时间

查询语句:

1: {

2: "size": 0,

3: "facets": {

4: "ips_stats": {

5: "terms_stats": {

6: "key_field": "nginx_log.@fields.ip",

7: "value_field": "nginx_log.@fields.request_time",

8: "size": 5

9: }

10: }

11: }

12: }

说明:

第2行的 size 表示 hits 命中的返回0条;

第3行的facets,第5行的terms_stats 是做分组查询的必要关键字。

第4行的 ips_stats 是对这个分组查询的命名,可以自己随便起。

第6行 key_field 表示对 nginx_log.@fields.ip 字段进行分组。

第7行 value_field 表示 对 nginx_log.@fields.request_time 的值进行分组后的运算。

第8行的 size 表示分组运算,最多返回多少行。

这个例子的查询结果如下,这里简单起见,只返回了2条。:

1: {

2: "took": 35641,

3: "timed_out": false,

4: "_shards": {

5: "total": 5,

6: "successful": 5,

7: "failed": 0

8: },

9: "hits": {

10: "total": 193109307,

11: "max_score": 1,

12: "hits": []

13: },

14: "facets": {

15: "ips_stats": {

16: "_type": "terms_stats",

17: "missing": 0,

18: "terms": [

19: {

20: "term": "180.149.157.110",

21: "count": 1871112,

22: "total_count": 1871112,

23: "min": 0.016,

24: "max": 80.306,

25: "total": 545853.1529999943,

26: "mean": 0.2917266058899704

27: },

28: {

29: "term": "59.49.225.22",

30: "count": 515179,

31: "total_count": 515179,

32: "min": 0,

33: "max": 600.004,

34: "total": 27793.9160000002,

35: "mean": 0.053950017372602924

36: }

37: ]

38: }

39: }

40: }

从结果我们可以看到,我们对 每个ip的执行时间计算了 个数、最大最小值,平均值,合计的计算。

例子:按照每个ip的请求数排序

查询JSON

1: {

2: "size": 0,

3: "facets": {

4: "time_stats": {

5: "terms_stats": {

6: "key_field": "nginx_log.@fields.ip",

7: "value_field": "nginx_log.@fields.request_time",

8: "size": 2,

9: "order": "total"

10: }

11: }

12: }

13: }

只比上述查询多了一个 order 属性.输出结果格式跟上面一样,只不过是排好序的,就不罗列了.

例子:查询整个网站的执行时间

查询json:

1: {

2: "query": {

3: "match_all": {}

4: },

5: "size": 0,

6: "facets": {

7: "stat1": {

8: "statistical": {

9: "field": "nginx_log.@fields.request_time"

10: }

11: }

12: }

13: }

说明:

最初的查询条件我们没有写,意味着取全部,如果你想查询指定范围,可以在这里书写。第2-4行。第5行的size表示查询条件显示的数据条数。

statistical 是对一个数字字段做统计的facet。

结果:

1: {

2: "took": 4824,

3: "timed_out": false,

4: "_shards": {

5: "total": 5,

6: "successful": 5,

7: "failed": 0

8: },

9: "hits": {

10: "total": 193109307,

11: "max_score": 1,

12: "hits": []

13: },

14: "facets": {

15: "stat1": {

16: "_type": "statistical",

17: "count": 142590544,

18: "total": 59320216.00531181,

19: "min": 0,

20: "max": 5347.085,

21: "mean": 0.4160178812790826,

22: "sum_of_squares": 14578358539.95768,

23: "variance": 102.06623708075713,

24: "std_deviation": 10.102783630304923

25: }

26: }

27: }

这个方法的更多参考:

整体参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值