首页 > 解决方案 > 弹性日期:日期以对象格式存储为 OffsetDateTime

问题描述

我以下列方式索引到弹性的数据是来自 Java 的 OffsetDateTime。

Timestamp closedDate = resultSet.getTimestamp("closedon");
org.threeten.bp.OffsetDateTime offsetDate= Instant.ofEpochMilli(closedDate.toInstant().toEpochMilli())
                    .atOffset(ZoneOffset.UTC)

我将此 offsetDate 存储到弹性中,它转换为以下内容..

"closedDate": {
                        "dateTime": {
                            "date": {
                                "year": 2020,
                                "month": 6,
                                "day": 15
                            },
                            "time": {
                                "hour": 11,
                                "minute": 26,
                                "second": 1,
                                "nano": 37000000
                            }
                        }

我想使用像下面这样简单的东西来查询它,但它不起作用,因为格式都不同。如何更改被索引的数据的格式?

{
           "range": {
            "closedDate": {
              "gte": "2021-05-22T00:00:00.000Z",
              "lte": "2021-02-01T00:00:00.000Z",
              "format": "strict_date_optional_time"
            }
          }
        }

映射:

"closedOn": {
                    "properties": {
                        "dateTime": {
                            "properties": {
                                "date": {
                                    "properties": {
                                        "day": {
                                            "type": "long"
                                        },
                                        "month": {
                                            "type": "long"
                                        },
                                        "year": {
                                            "type": "long"
                                        }
                                    }
                                },
                                "time": {
                                    "properties": {
                                        "hour": {
                                            "type": "long"
                                        },
                                        "minute": {
                                            "type": "long"
                                        },
                                        "nano": {
                                            "type": "long"
                                        },
                                        "second": {
                                            "type": "long"
                                        }
                                    }
                                }
                            }
                        },

标签: javadateelasticsearchdate-format

解决方案


是的,索引映射错误,我使用了一个 json 序列化程序,在映射为“类型”:“日期”后它现在可以正常工作。

谢谢萨希尔·古普塔。


推荐阅读