ElasticSearch中用aggs聚合求每分钟数据求和,并用java获取到数据
2016-09-08 09:34
567 查看
ElasticSearch中用aggs聚合求每分钟数据求和,并用java获取到数据.
最近要做一个图表,数据为每分钟委托笔数, 数据在ElasticSearch中存储, 并且每分钟可能有多条数据, 这里就用到了ElasticSearch聚合. 具体的ElasticSearch head插件中语句如下:
query部分为基本的数据查询,获取时间在23:58:50到23:59:56点之间的所有的数据;
aggs中是对query查询到的数据的聚合: 以”time”字段数据进行聚合, 以每分钟(interval)聚合一次, 时间格式为: “yyyy-MM-dd HH:mm:ss”(这个可以自己定义), 然后进行求和, 最后获得的是每分钟进行一次的sum值.
具体如下:
在java中我们要获取aggregations中数据需要如下代码:
.addAggregation(AggregationBuilders.dateHistogram(“articles_over_time”).field(“time”).interval(Interval.MINUTE).format(“yyyy-MM-dd HH:mm:ss”)
.subAggregation(AggregationBuilders.sum(“sum_value”).field(“value”)))是对ElasticSearch中如下语句进行的封装
最近要做一个图表,数据为每分钟委托笔数, 数据在ElasticSearch中存储, 并且每分钟可能有多条数据, 这里就用到了ElasticSearch聚合. 具体的ElasticSearch head插件中语句如下:
{ "query": { "filtered": { "filter": { "bool": { "must": [ { "range": { "time": { "gte": "2016.09.07 09:15:50", "lte": "2016.09.07 15:00:00" } } } ] } } } }, "aggs": { "articles_over_time": { "date_histogram": { "field": "time", "interval": "minute", "format": "yyyy-MM-dd HH:mm:ss" }, "aggs": { "sum_value": { "sum": { "field": "value" } } } } } }
query部分为基本的数据查询,获取时间在23:58:50到23:59:56点之间的所有的数据;
aggs中是对query查询到的数据的聚合: 以”time”字段数据进行聚合, 以每分钟(interval)聚合一次, 时间格式为: “yyyy-MM-dd HH:mm:ss”(这个可以自己定义), 然后进行求和, 最后获得的是每分钟进行一次的sum值.
具体如下:
在java中我们要获取aggregations中数据需要如下代码:
SearchResponse response2 = conn.searchClient.prepareSearch("hydrant-2016.09.07") .setTypes(type) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(queryStr) .addAggregation(AggregationBuilders.dateHistogram("articles_over_time").field("time").interval(Interval.MINUTE).format("yyyy-MM-dd HH:mm:ss") .subAggregation(AggregationBuilders.sum("sum_value").field("value"))) .execute().actionGet(); DateHistogram terms = response2.getAggregations().get("articles_over_time"); List<DateHistogram> bucketSize = (List<DateHistogram>) terms.getBuckets(); //第一种方式获取sum_value以及value值 InternalSum m = (InternalSum)terms.getBuckets().get(0).getAggregations().asList().get(0); System.out.println(m.getName()+"== =="+m.getValue()); //获得name: "sum_value" / 值(value): 63 //第二种方式获取sum_value以及value值 // Iterator s=terms.getBuckets().get(0).getAggregations().iterator(); //获取聚合函数数组 // while(s.hasNext()){ //遍历, 获取name, value // InternalSum m=(InternalSum) s.next(); // System.out.println(m.getName()+"== =="+m.getValue()); // } System.out.println(terms.getBuckets().get(0).getKey());//获得时间 "key_as_string": "2016-09-07 23:58:00" System.out.println(terms.getBuckets().get(0).getDocCount()); //获得 "doc_count": 1,
.addAggregation(AggregationBuilders.dateHistogram(“articles_over_time”).field(“time”).interval(Interval.MINUTE).format(“yyyy-MM-dd HH:mm:ss”)
.subAggregation(AggregationBuilders.sum(“sum_value”).field(“value”)))是对ElasticSearch中如下语句进行的封装
"aggs": { "articles_over_time": { //自定义 "date_histogram": { "field": "time", "interval": "minute", "format": "yyyy-MM-dd HH:mm:ss" }, "aggs": { "sum_value": { "sum": { "field": "value" } } } } }
相关文章推荐
- 在Kubernetes上搭建EFK(Fluentd+Elasticsearch+Kibana)
- 巧用mysql提示符prompt清晰管理数据库的方法
- 两大步骤教您开启MySQL 数据库远程登陆帐号的方法
- phpmyadmin 4+ 访问慢的解决方法
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- CentOS 5.5下安装MySQL 5.5全过程分享
- MySQL复制的概述、安装、故障、技巧、工具(火丁分享)
- MySQL中删除重复数据的简单方法
- MySQL5.5.21安装配置教程(win7)
- 使用ElasticSearch6.0快速实现全文搜索功能的示例代码
- elasticsearch批量数据导入和导出
- 欠饿了么一顿外卖
- 使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务
- ElasticSearch 使用心得
- ES中如何使用逗号来分词
- elk 简单实用
- ElasticSearch 守护进程 JSW
- elasticsearch2.3安装以及集群部署
- elasticsearch增删改查