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的执行时间计算了 个数、最大最小值,平均值,合计的计算。
相关技术参考: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: }
这个方法的更多参考:
ElasticSearch 分组查询的几个例子的更多相关文章
- ElasticSearch 分组查询
curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "size": 0, "aggs": { &qu ...
- ElasticSearch DSL 查询
公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...
- 08章 分组查询、子查询、原生SQL
一.分组查询 使用group by关键字对数据分组,使用having关键字对分组数据设定约束条件,从而完成对数据分组和统计 1.1 聚合函数:常被用来实现数据统计功能 ① count() 统计记录条数 ...
- SQL分组查询group by
注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group ...
- SQL group by分组查询(转)
本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳 ...
- mongodb使用mongoose分组查询
一个分组查询的例子: model.aggregate([{$match: ops}, {$unwind: '$details'}, {$sort: {create_at: -1}}, { $group ...
- SQL分组查询GroupBy
一.分组查询1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式 ...
- Oracle和MySQL分组查询GROUP BY
Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...
- Oracle_group by分组查询_深入
Oracle_group by分组查询_深入 本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析. 创建分 ...
随机推荐
- Unity的AssetDatabase路径格式
开发环境 windows 7 Unity 5.3 及更高版本 前言 使用AssetDatabase.Load或AnimatorController.CreateAnimatorControllerAt ...
- 归并排序python实现
归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...
- burp抓取手机模拟器流量
这里安装的是夜神模拟器,网络模式设置为桥接: 然后从burp suite 导出证书,存为.cer格式.将其导入手机模拟器(我用百度网盘导入的,自带的文件导入,不太会用,找不到放哪了) 然后给手机模拟器 ...
- stored information about method csdn
Eclipse编译时保留方法的形参 Window -> Preferences -> Java -> Compiler. 选中Store information about meth ...
- 【shell脚本】shell脚本实现的 函数差集查找
文本地址 点击关注微信公众号 wenyuqinghuai 分享提纲: 1. 问题背景 2. 代码实现 1.问题背景 在做公司的测试的自动化测试时,覆盖了一些开发代码的函数,但是那些还没有做,使用一个函 ...
- sboot mybatis
https://www.cnblogs.com/lspz/p/6723603.html spring.datasource.url=jdbc:mysql://10.46.52.205:3306/tes ...
- ubuntu 环境下编译 hadoop 2.6.0的简单方法
由于服务器一般都64位系统, hadoop网站的release版本32位native库不能运行,所以需要自己在编译一下.以下是我采用的一个编译的过程,比较简单,不用下载各种版本及环境配置,通过命令就能 ...
- ContentTypes 的应用
ContentTypes django 中的一个应用程序(app),可以跟踪Django项目中安装的所有模型(Model),提供用于处理模型的高级通用接口. Contenttypes应用的核心是Con ...
- docker swarm:Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable
环境:cetos7 描述:创建完docker swarm,想把node主机加入swarm中,执行以下命令时,报错 无法连接! 原因是:防火墙!!!!!!!没关!!!! 解决办法是:关闭防火墙
- 解决vaio s13笔记本 ubuntu重启卡屏问题
终端 sudo gedit /etc/default/grub 找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash",添加内核启动参数reboot ...