解析和格式化 Min/Max 日期值 - 用于 elasticsearch 聚合
Parsing or Formating Min/Max date value - For elaticsearch aggregation
我在这里遇到了一个奇怪的场景。我要使用 Elasticsearch 和 c#:
执行此聚合
"aggs": {
"Max_opened_at": {
"max": {
"field": "opened_at"
}
},
"Min_opened_at": {
"min": {
"field": "opened_at"
}
}
}
到目前为止,return向我发送汇总键如下:
Response: {
"took" : 29,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 30218,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"Min_sys_created_on" : {
"value" : 1.402508357E12,
"value_as_string" : "1402508357000"
},
"Min_sys_updated_on" : {
"value" : 1.453305924E12,
"value_as_string" : "1453305924000"
}
这里的问题是 return 本身。当我尝试转换值(“1453305924000”)时假设它是使用下面的标准转换的 Unix 格式,由于 "out of range value" 异常而失败:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date - epoch).TotalSeconds);
我相信我有两个选择:
A) 找到一种方法将此值(“1453305924000”)转换为可理解的日期格式。 Unix 转换没有像我说的那样工作...
B) 使用 C#,在 Elastic 查询中添加 "format" 属性。它看起来像这样:
"aggs": {
"test": {
"min": {
"field": "sys_created_on",
"format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
}
}
不幸的是,我不知道如何使用 NEST C# 添加此 "format" 属性。
对 A 或 B 有什么想法吗?
非常感谢!!
1453305924000 是自纪元以来的毫秒数,因此您无需从纪元中减去它。所以你可以选择选项 A 并简单地这样做:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
return epoch.AddMilliseconds(date).ToLocalTime();
我在这里遇到了一个奇怪的场景。我要使用 Elasticsearch 和 c#:
执行此聚合 "aggs": {
"Max_opened_at": {
"max": {
"field": "opened_at"
}
},
"Min_opened_at": {
"min": {
"field": "opened_at"
}
}
}
到目前为止,return向我发送汇总键如下:
Response: {
"took" : 29,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 30218,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"Min_sys_created_on" : {
"value" : 1.402508357E12,
"value_as_string" : "1402508357000"
},
"Min_sys_updated_on" : {
"value" : 1.453305924E12,
"value_as_string" : "1453305924000"
}
这里的问题是 return 本身。当我尝试转换值(“1453305924000”)时假设它是使用下面的标准转换的 Unix 格式,由于 "out of range value" 异常而失败:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date - epoch).TotalSeconds);
我相信我有两个选择:
A) 找到一种方法将此值(“1453305924000”)转换为可理解的日期格式。 Unix 转换没有像我说的那样工作...
B) 使用 C#,在 Elastic 查询中添加 "format" 属性。它看起来像这样:
"aggs": {
"test": {
"min": {
"field": "sys_created_on",
"format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
}
}
不幸的是,我不知道如何使用 NEST C# 添加此 "format" 属性。
对 A 或 B 有什么想法吗?
非常感谢!!
1453305924000 是自纪元以来的毫秒数,因此您无需从纪元中减去它。所以你可以选择选项 A 并简单地这样做:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
return epoch.AddMilliseconds(date).ToLocalTime();