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的执行时间计算了 个数、最大最小值,平均值,合计的计算。

相关技术参考:http://stackoverflow.com/questions/16549001/elasticsearch-order-responses-and-then-facet/16568770

例子:按照每个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: }

这个方法的更多参考:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-statistical-facet.html

ElasticSearch 分组查询的几个例子的更多相关文章

  1. ElasticSearch 分组查询

    curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "size": 0, "aggs": { &qu ...

  2. ElasticSearch DSL 查询

    公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...

  3. 08章 分组查询、子查询、原生SQL

    一.分组查询 使用group by关键字对数据分组,使用having关键字对分组数据设定约束条件,从而完成对数据分组和统计 1.1 聚合函数:常被用来实现数据统计功能 ① count() 统计记录条数 ...

  4. SQL分组查询group by

    注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group ...

  5. SQL group by分组查询(转)

    本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳 ...

  6. mongodb使用mongoose分组查询

    一个分组查询的例子: model.aggregate([{$match: ops}, {$unwind: '$details'}, {$sort: {create_at: -1}}, { $group ...

  7. SQL分组查询GroupBy

    一.分组查询1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式 ...

  8. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  9. Oracle_group by分组查询_深入

    Oracle_group by分组查询_深入 本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.                    创建分 ...

随机推荐

  1. python第一百三十天 ---简单的BBS论坛

    简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...

  2. win8.1安装win64_11gR2_database_2of2 【INS-13001]】环境不满足最低要求问题

    1. 如图问题: 2. 修改 database\stage\cvu\cvu_prereq.xml, 添加windows 8.1 <OPERATING_SYSTEM RELEASE="6 ...

  3. 自定义实现HashMap的put、get方法

    public class HashMap{ public static void main(String[] args){ put("aa", "wo ai ni&quo ...

  4. 转://Oracle 高可用技术与云基础架构

    众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...

  5. springmvc中messageConverter用法

    解决StringHttpMessageConverter乱码问题问题: 当我们将字符串对象通过springmvc传回浏览器时,因为StringHttpMessageConverter消息转换器中默认的 ...

  6. 玄学bug(1)---注释里面的中文会报错

    有时候正常没有问题的程序会报错,可能跟注释里面的中文也有关系 with open('photo1.jpg','rb') as file: data = file.read() #print(data) ...

  7. 深入理解 ES6中的 Reflect

    阅读目录 一:Reflect.get(target, name, receiver) 二:Reflect.set(target,name,value,receiver) 三:Reflect.apply ...

  8. HTTP与HTTPS对访问速度(性能)的影响

    1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗. 本文主要介绍 https 对用户体验的影响. ...

  9. Spring Boot 之发送邮件

    Spring Boot 之发送邮件 简介 API 配置 实战 引入依赖 配置邮件属性 Java 代码 完整示例 引申和引用 简介 Spring Boot 收发邮件最简便方式是通过 spring-boo ...

  10. C# 下载文件

    最近一段时间,真的是太忙太忙了!经历了自我毕业以来最忙碌的一个项目! 说起这个项目,我有万千感慨 且不说技术能力,也无需谈论项目需求.单就项目压力,日常加班,周六日补班而言,我相信很多人是扛不住的! ...