시간대가있는 날짜가 포함 된 elasticsearch의 데이터를 인덱싱하려고합니다.잘못된 날짜 오류 Elasticsearch에 데이터 인덱싱
내 날짜 매핑이다 : 나는 내 자신의 ZonedDateTime 어댑터를 만든
client.prepareIndex(INDEX, TYPE, id))
.setSource(gson.toJson(object), XContentType.JSON)
.setRefreshPolicy(RefreshPolicy.IMMEDIATE)
.get();
다음과 같습니다 :
public class ZonedDateTimeAdapter implements JsonSerializer<ZonedDateTime> {
public JsonElement serialize(ZonedDateTime date, Type typeOfSrc, JsonSerializationContext context) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
return new JsonPrimitive(date.format(formatter));
}
}
을 나는 인덱스에 다음 코드를 데이터를 사용
"date": {
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
}
결과 날짜는 2005-01-01T13:35:50.596-0500
입니다. 어떤 내게 yyyy-MM-dd'T'HH:mm:ss.SSSZ
내 형식과 일치하는 것 같습니다. 그러나 나는라는 오류가 나타납니다 스레드에
예외를 "주"MapperParsingException의 [가 을 구문 분석하는 데 실패 [startDate를]]; 중첩 : IllegalArgumentException가 [잘못된 형식 : "2005-01-01T13 : 35 : 50.596-0500"가 "0.596-0500"에, 부정한다]
흥미로운 것은 내가 ZonedDateTimeAdapter의 형식을 변경하는 경우 yyyy-MM-dd'T'HH:mm:ss.000Z
을 읽을 수 있다는 것입니다 (두 번째 분수는 항상 000이되어야 함) 결과는 2005-01-01T13:31:06.000-0500
과 같습니다. 이 날짜의 개체는 elasticsearch에 성공적으로 인덱싱됩니다.
2005-01-01T13:31:06.000-0500
색인이 성공적으로 색인화되었지만 2005-01-01T13:35:50.596-0500
이 아닌 이유를 알고 계십니까? 이 형식이 같은 형식이 아닌가요?
감사합니다. 0.001 밀리 초가 아닌가? .000000001은 나노초입니까? – Gabriel
정말 옳은 소식입니다. 내 실수에 대한 사과 - 이전에이 문제에 직면 한 이후로 당신이 마이크로/나노초를하고 있다고 당연히 생각했습니다. 즉, 하나의 필드가있는 두 개의 문서를 삽입하여 모의 색인 (기본 매핑 사용)을 만들려고했습니다. 하나는 가치 '2005-01-01T13 : 31 : 06.000-0500'과 하나는'2005-01-01T13 : 31 : 06.596-0500'입니다. 둘 다 성공적으로 삽입되었습니다. 매핑이 문제를 일으키는 지 확인하십시오. – sam
@Gabriel 내 로컬 ES에서 시도했다. 5.2 : 같은 매핑을 만들었고, 인덱스를 만들었으며, 그 값을 가진 두 개의 문서를 삽입했다. 모든 것이 잘 동작했다. 내 대답을 업데이트하여 로그를 반영했습니다. 간단한 컬 명령을 시도해 볼 수 있습니까? 문제를 ES 자체 또는 Java API로 격리 할 수 있습니다. – sam