Elasticsearch Client返回时间戳字符串



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

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

我已经创建了@ObjectType类,如下所示:

@ObjectType()
export class LogMessage {
@Field()
message: string;
@Field()
timestamp: Date;

}

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

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

这是ElasticSearch将日期呈现为字符串的预期行为。如前所述,需要将字符串转换为日期类型。请查看elasticsearch的日期字段文档。

下面是doc:

的片段

JSON没有日期数据类型,所以Elasticsearch中的日期可以是:

  • 包含格式化日期的字符串,例如"2015-01-01"或"2015/01/01 12:10:30"。
  • 表示毫秒数的数字。
  • 表示从epoch(配置)开始的秒数。

同样来自同一个文档:

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

最新更新