在线等:histogram 按时间 聚合 的 时区 问题

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日 的 记录如下)
QQ%E6%88%AA%E5%9B%BE20180725105916

不过 我按照 我上面的检索 之后,是满足以上样式了。
但是 时间 分组 是 异常的。显示的 居然是 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 这样的

谢谢

我不是很懂这个 但我尽量帮你看看 你存时间的时候设置时区了么
然后报错返回的结果有么,有可能你的数据不是date类型就没办法用date_histogram
你的版本有点老

没有报错,只是 异常;
返回结果 我写上去了 你能看到 。

直方图 我是按照 一天入桶的 不应该是显示 那天的 8点啊,而且 我经过 对比发现 统计出来的数量是不一致的。所以我怀疑是 直方图分桶的时候 可能因为时区 造成了 错放,,我想确认下 1.7 版本 是不是 histogram 的时区 有问题 还是 说 我 该怎么处理。。。求 指教 了、、、

如果你不设置时区 它默认使用utc时间

{
    "aggs" : {
        "time" : {
            "date_histogram" : {
                "field" : "ctimeint",
                "interval" : "86400",
                "time_zone": "+08:00"
            }
        }
    }
}

我没看到你的返回值 显示你撤回了

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.