要实现这样一个功能
select count(1),小时 from user where createDate=今天 group by 每小时
原本以为很简单的一个聚合很容易找到相关资料,没想到花了好几个小时
首先建一个测试的index和type,分别为ksearch_test和user,
建立mapping
http://ip:port/ksearch_test/user/_mapping PUT
{
"user":{
"properties":{
"name":{
"type":"string",
"index":"not_analyzed" //不分词
},
"createDate":{
"type":"date",
"index":"not_analyzed"
}
}
}
}
实现聚合,按每小时统计当天数据:
http://ip:port/ksearch_test/user/_search POST
{
"size": 0,
"aggs": {
"group_by_state": {
"date_histogram": { //es提供的时间处理函数
"field": "createDate", //需要聚合的字段名字
"interval": "hour", //按小时group by
"format": "yyyy-MM-dd HH", //返回值格式化,HH大写,不然不能区分上午、下午
"min_doc_count": 0, //为空填充0
"extended_bounds": { //需要填充0的范围
"min": "2016-12-19 01",
"max": "2016-12-19 23"
}
}
}
},
"query": { //这就是where
"filtered": {
"filter": {
"range": {
"createDate": {
"gte": "2016-12-19T00:00:00.000",
"lt": "2016-12-20T00:00:00.000"
}
}
}
}
}
}
使用spring-data-elasticsearch在java中实现
@SuppressWarnings("deprecation")
@Test
public void group_by_day(){
String indexName = "ksearch_test3";
String typeName = "ks_user_trace";
//QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.queryFilter(QueryBuilders.rangeQuery("create_time").gte("2016-11-19T01:00:00.000").lt("2016-12-19T00:00:00.000")));
QueryBuilder queryBuilder = QueryBuilders.queryFilter(QueryBuilders.rangeQuery("create_time").gte("2016-11-19T01:00:00.000").lt("2016-12-19T00:00:00.000"));
AbstractAggregationBuilder aggregation = AggregationBuilders.dateHistogram("group_by_day").field("create_time").interval(DateHistogramInterval.DAY).format("yyyy-MM-dd").minDocCount(0L).extendedBounds("2016-11-19", "2016-12-19");
SearchRequestBuilder reqBuilder = client.prepareSearch(indexName)
.setTypes(typeName)
.setQuery(queryBuilder)
.addAggregation(aggregation);
SearchResponse resp = reqBuilder.execute().actionGet();
Aggregations aggs = resp.getAggregations();
InternalHistogram agg = aggs.get("group_by_day");
List<Bucket> buckets = (List<Bucket>) agg.getBuckets();
for(Bucket bucket:buckets){
Long docCount = bucket.getDocCount();
String date = bucket.getKeyAsString();
System.out.println(date+":"+docCount);
}
}
分享到:
相关推荐
ElasticSearch数据导出 elasticsearch单文档数据导出 支持自定义查询 导出数据Json文件
elasticsearch_exporter, Elasticsearch的统计数据导出程序 Elasticsearch导出程序 面向ElasticSearch的各种标准的Prometheus导出器,用。安装对于预生成的二进制文件,请查看发行版。...
ElasticSearch官方测试数据
Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合: Wikipedia 使用 Elasticsearch 提供带有...
ElasticSearch测试数据
因为你不知道将Hive的数据导入到了ElasticSearch后,数据量是否准确,所以需要钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量,注意,这个项目打包后,最好另起一个进程调用,并且开始时间为文章1或者2最大...
ElasticSearch数据导入 文件导入 单个索引导入 文件按格式采用Json
ES 官方示例数据
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
elastic数据导出工具,可以直接将es中的数据导入存储到Mysql,也可以指定存储到本地文件夹中,可以选择以json格式或者sql语句的形式
可用于Elasticsearch学习使用的测试数据。数据格式为xml,需要通过logstash导入Elasticsearch。
Elasticsearch 示例数据 accounts.json Elasticsearch 示例数据 accounts.json Elasticsearch 示例数据 accounts.json
Linux环境下使用sqlplus工具将oracle中的数据导入到elasticsearch中。只需要在es_bulk_tool.properties配置sql即可实现数据的批量导入。在elasticsearch6中测试通过。shell脚本需要使用sqlplus。
Elasticsearch测试数据 1000条
elasticsearch
Bigdesk 是 ElasticSearch 的一个集群监控工具,可生成 ElasticSearch 集群的即时图表和统计信息。可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。版本对应关系表:...
elasticsearch或kafka的数据抽取工具:logstash-5.6.1,版本5.6.1,可实现全量或增量的数据抽取,有需要可自行下载~
mysql_to_elasticsearch_增量同步数据配置文件.conf。
ElasticSearch 批量导入一批数据 解压后再当前位置命令行执行命令