为json中的数据选择正确的日期格式

时间:2018-08-04 14:30:02

标签: elasticsearch localdate

我正在使用弹性搜索,我想按日期范围创建搜索,我正在考虑将LocalDate用于此唯一问题是json数据中的日期看起来像这样

 {
        "departure": {
            "city": "\u041c\u0438\u043d\u0441\u043a",
            "date": "Aug 27, 2018 12:09:00 AM"
        },

我大约有1000个这样,所以将json中的每个日期更改为yyyy-mm-dd格式对我来说是不明智的

我的搜索方法就是这样的Java。

 public List<Map<String, Object>> searchDao(LocalDate departureDateFrom, LocalDate departureDateTo,
                                               String countryOrCityOrHotel, int nights, int people, String departureCity) {
        List<Map<String, Object>> search = new ArrayList<>();


        QueryBuilder range = QueryBuilders.rangeQuery("date")
                 .from(departureDateFrom)
                 .to(departureDateTo)
                .includeLower(true)
                .includeUpper(true);

        QueryBuilder cityQuery = QueryBuilders.matchQuery("departure.city", departureCity);
        QueryBuilder nightsQuery = QueryBuilders.matchQuery("nights", nights);
        QueryBuilder peopleQuery = QueryBuilders.matchQuery("people", people);
        QueryBuilder destinationHotel = QueryBuilders.matchQuery("hotel.country", countryOrCityOrHotel);

如何更改本地日期格式以接受此类日期,以便更轻松地按原样使用数据。

1 个答案:

答案 0 :(得分:2)

您需要在索引模板中使用正确的映射:  {     “出发日期”: {           “ type”:“日期”      } }

然后在您的Java代码中编写以下代码:

QueryBuilder range = QueryBuilders.rangeQuery("date")
             .from(departureDateFrom)
             .to(departureDateTo)
             .format("MM dd yyyy hh:mm:ss")
             .includeLower(true)
             .includeUpper(true);

但是总的来说,在存储日期时使用纪元时间始终是个好主意,因为字符串非常脆弱,而且格式随时都在变化。