【问题标题】:Parsing or Formating Min/Max date value - For elaticsearch aggregation解析和格式化最小/最大日期值 - 用于弹性搜索聚合
【发布时间】:2016-05-27 04:35:38
【问题描述】:

我在这里遇到了一个奇怪的情况。我可以使用 Elasticsearch 和 c# 执行此聚合:

 "aggs": {
    "Max_opened_at": {
      "max": {
        "field": "opened_at"
      }
    },
    "Min_opened_at": {
      "min": {
        "field": "opened_at"
      }
    }
  }

到目前为止,它正在将聚合键返回给我,如下所示:

    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"
    }

这里的问题是返回本身。当我尝试使用下面的标准转换假设它是 Unix 格式的值(“1453305924000”)时,由于“超出范围值”异常而失败:

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date - epoch).TotalSeconds);

我相信我有两种选择:

A) 想办法将此值(“1453305924000”)转换为可理解的日期格式。 Unix 转换没有像我说的那样工作......

B) 使用 C#,在弹性查询中添加“格式”属性。它看起来像这样:

  "aggs": {
    "test": {
      "min": {
        "field": "sys_created_on", 
        "format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
      }
    }

不幸的是,我不知道如何使用 NEST C# 添加这个“格式”属性。

对 A 或 B 有什么想法吗?

非常感谢!!

【问题讨论】:

    标签: c# datetime elasticsearch format aggregation


    【解决方案1】:

    1453305924000 是 纪元以来的毫秒数,因此您无需从纪元中减去它。所以你可以选择选项 A 并简单地这样做:

    DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    return epoch.AddMilliseconds(date).ToLocalTime();
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2015-06-06
      相关资源
      最近更新 更多