ES 插入的 数据 :
"hits": [{
"_index": "log",
"_type": "accesslog",
"_id": "5b2977e843644c8a7e8b4582",
"_score": 1,
"_source": {
"id": {
"$id": "5b2977e843644c8a7e8b4582"
},
"ip": "117.30.209.86",
"source_url": "www",
"ctime": "2018-06-20 05:38:48",
"ctimeint": 1529444328,
"pagemarks": "PC",
"user_id": 1021001,
"url": "id=101119055",
"user_agent": "Microsoft Internet Explorer"
}
}, ]
ES 查询代码:
GET / log / accesslog / _search {
"size": 0,
"query": {
"filtered": {
"query": {
"bool": {
"must": [{
"range": {
"ctimeint": {
"gte": 1532016000,
"lt": 1532275200
}
}
}]
}
}
}
},
"aggs": {
"time": {
"histogram": {
"field": "ctimeint",
"interval": 86400
},
"aggs": {
"mark": {
"terms": {
"field": "pagemarks",
"size": 0,
"collect_mode": "breadth_first"
},
"aggs": {
"ip": {
"cardinality": {
"field": "ip"
}
}
}
}
}
}
}
}
查询结果:
"aggregations": {
"time": {
"buckets": [{
"key": 1531958400,
"doc_count": 1266094,
"mark": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": "groupbuydetail",
"doc_count": 89115,
"ip": {
"value": 3494
}
}, ]
}
}]
}
问题:
需求: 我需要查询某几天内的数据,然后聚合分组到 每天的 不同pagemarks 并统计 pagemarks下的不重复IP 的 数量,最终得到的 数据样本应该是这样的: (查询2018-07-20 到 2018-07-22日 的 记录如下)
不过 我按照 我上面的检索 之后,是满足以上样式了。
但是 时间 分组 是 异常的。显示的 居然是 2018/7/19 08:00:00
query 中的 时间戳转换情况如下 :
query->range: 1532016000 (2018/7/20) ~ 1532275200 (2018/7/23)
agg->buckets: 1531958400 (2018/7/19 08:00:00)
以下几个情况 说明下:
1,put 进ES 的数据源 时间 我们是按照 上海时间 存入的 !
2, 我的 elasticsearch 版本 是 1.7.3
3, 我的 linux(centos) 时间 形如 : Tue Jul 24 18:21:06 CST 2018;
4,开发语言是 PHP
我了解到的一些情况:
1, date_histogram 是可以设置时区的 ,我对 histogram 设置时区 就报错
2,我使用 date_histogram 进行 聚合 使用 {"field":"ctimeint","interval":"1d" } 也会报错
大牛,这样的问 该怎么办,我想查询的 分组时间是 2018/7/20 2018/7/21 2018/7/22 这样的
谢谢