#elasticsearch #spring-data-elasticsearch
Вопрос:
Я использую Spring Data Elasticsearch для поиска чего-то промежуточного 2010-01-01
и LocalDate.MAX
что не удается с:
nested: ElasticsearchException[Elasticsearch exception [type=arithmetic_exception, reason=long overflow]]
Имеющий springDataElasticsearchRepository.findByAgeBetween(startLocalDate, endLocalDate)
.
Какова максимальная дата, которую принимает Elasticsearch, или как иначе избежать этой ошибки?
Ответ №1:
Elasticsearch хранит даты в виде длинных значений, представляющих миллисекунды с начала эпохи. Если вы запустите следующий код
public static void main(String[] args) {
long maxLong = Long.MAX_VALUE;
Instant instant = Instant.ofEpochMilli(maxLong);
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("UTC"));
LocalDate localDate = LocalDate.from(zonedDateTime);
System.out.println(localDate);
}
вы получите
292278994-08-17
в качестве максимальной представимой даты. Максимальное LocalDate
значение составляет
999999999-12-31
Ответ №2:
Использование springDataElasticsearchRepository.findByAgeBetween(Optional<LocalDate> startLocalDate, Optional<LocalDate> endLocalDate)
позволяет избежать LocalDate.MIN
и LocalDate.MAX
которые вызывают проблемы.