弹性(搜索):查询结果日期格式与存储格式不同

时间:2015-05-18 11:43:16

标签: date format elasticsearch

当我从查询中解析结果时,

弹性日期格式转换出现问题。所以我在日期字段上有一个默认映射,如下所示:

"timestamp" : {
  "type" : "date",
  "format" : "dateOptionalTime"
}

并将其存储为"timestamp":"2015-05-06T08:52:56.387Z" 如果我在该字段上执行最大聚合,我会得到一个长值:

"timestamp_max": {
  "value": 1430902071110
}

但我希望该值与存储的值相同。我读到可以指定聚合中的格式但它不起作用。我试过了:

"aggregations":{
  "timestamp_max":{
    "max":{
      "field":"timestamp",
      "format" : "dateOptionalTime"
    }
  }
}

但这会产生SearchParseException ... SearchParseException[[logstash-2015.05.07][0]: query[ConstantScore(BooleanFilter(+no_cache(timestamp:[1429357190515 TO 1431949190515])))],from[-1],size[-1]: Parse Failure [Unexpected token VALUE_STRING in [timestamp_max].]]; ...

我做错了什么?

祝你好运, 扬

1 个答案:

答案 0 :(得分:2)

你几乎就在那里。您只需使用correct formatting pattern指定日期格式,如下所示:

"aggregations":{
  "timestamp_max":{
    "max":{
      "field":"timestamp",
      "format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    }
  }
}

请注意,这仅适用于ES 1.5.0及更高版本。请参阅ES github上的related issue