【问题标题】:Elasticsearch Client returns timestamp as stringElasticsearch 客户端以字符串形式返回时间戳
【发布时间】:2021-10-21 08:31:45
【问题描述】:

我想从 elasticsearch 获取一些日志数据并使用 graphql 将其返回到 UI。 我在我的nest.js 后端使用nestjs/elasticsearch 客户端,它是'elastic/elasticsearch' 的包装器。 我还将弹性搜索索引中的时间戳字段映射为“日期”。

"mappings": {
    "properties": {
        "timestamp": {
            "type": "date"
        },
        "message": {
            "type": "keyword"
        },
    }
}

我已经按如下方式创建了@ObjectType 类:

@ObjectType()
export class LogMessage {

  @Field()
  message: string;

  @Field()
  timestamp: Date;
   
}

但是,在从 Elasticsearch 获取文档时,时间戳作为“字符串”返回。 因为ObjectType 期望'timestamp' 是一个日期,所以我在'graphql' 对'timestamp' 字段的响应中得到'null'。 更改为 'timestamp: string',我在响应中看到了时间戳。

如何调试此问题并确保 elasticsearch 客户端将“时间戳”作为“日期”返回? 要么 这是预期的行为,我需要手动将字符串转换为 Date 类型吗?

【问题讨论】:

    标签: node.js elasticsearch nestjs


    【解决方案1】:

    这是 ElasticSearch 将日期呈现为字符串的预期行为。正如您所提到的,您需要将字符串转换为日期类型。 请查看elasticsearch的Date Field documentation

    以下是文档中的 sn-p:

    JSON 没有日期数据类型,因此 Elasticsearch 中的日期可以 要么是:

    • 包含格式化日期的字符串,例如“2015-01-01”或“2015/01/01 12:10:30”。
    • 一个表示自时代以来毫秒数的数字。
    • 一个数字,表示自时代以来的秒数(配置)。

    也来自同一个文档:

    日期将始终呈现为字符串,即使它们最初是 在 JSON 文档中以 long 形式提供。

    【讨论】:

    • @dhruvparekh12 如果对您有帮助,请标记为答案。
    • 知道了。谢谢@sagar-patel
    猜你喜欢
    • 2014-10-14
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多