我正在使用弹性搜索,我想按日期范围创建搜索,我正在考虑将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);
如何更改本地日期格式以接受此类日期,以便更轻松地按原样使用数据。
答案 0 :(得分:2)
您需要在索引模板中使用正确的映射: { “出发日期”: { “ type”:“日期” } }
然后在您的Java代码中编写以下代码:
QueryBuilder range = QueryBuilders.rangeQuery("date")
.from(departureDateFrom)
.to(departureDateTo)
.format("MM dd yyyy hh:mm:ss")
.includeLower(true)
.includeUpper(true);
但是总的来说,在存储日期时使用纪元时间始终是个好主意,因为字符串非常脆弱,而且格式随时都在变化。