import java.time.Instant;
@Document(indexName = "log")
public class Log {
@Id
private String id;
@Field(type = FieldType.Date, store = true)
private Instant timestamp = null;
...
이전 로그 문서는 다음과 같습니다. ES java.util.Date
와 2.4.6 고산과 java.time.Instant
와 ES 2.4.6에
import java.util.Date;
@Document(indexName = "log")
public class Log {
@Id
private String id;
@Field(type = FieldType.Date, store = true)
private Date timestamp = null;
, 나는 어떤 문제가 발생하지 않습니다.
그러나 ES 2.4.6-alpine에서 java.time.Instant
을 사용하는 경우 다음 오류가 표시됩니다. alpine linux 및 java.time 형식화에 문제가있는 것으로 보입니다.
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/v1] threw exception [Request processing failed; nested exception is MapperParsingException[failed to parse [timestamp]]; nested: IllegalArgumentException[unknown property [epochSecond]];] with root cause
java.lang.IllegalArgumentException: unknown property [epochSecond]
at org.elasticsearch.index.mapper.core.DateFieldMapper.innerParseCreateField(DateFieldMapper.java:520)
at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:241)
at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:321)
at org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:311)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:328)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:254)
at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:124)
at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309)
at org.elasticsearch.index.shard.IndexShard.prepareCreate(IndexShard.java:533)
at org.elasticsearch.index.shard.IndexShard.prepareCreateOnPrimary(IndexShard.java:510)
at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:214)
at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:223)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:157)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:66)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:657)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:287)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279)
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:77)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:378)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
alpine elasticsearch에서 java.time. *을 사용하는 데 필요한 조언이 있습니까?
curl -xGET localhost:9200/*
docker-compose up -d
명령 후 나는 초기 데이터가 있습니다. 이 데이터는 -XDELETE
및 docker-compose down
및 docker-compose up -d
명령 후에도 다시 나타납니다.
elasticsearch : 2.4.6 및 elasticsearch : 2.4.6-alpine dockers의 초기 데이터는 동일합니다.
{
"log":{
"aliases":{},
"mappings":{
"log":{
"properties":{
"timestamp":{
"type":"date",
"store":true,
"format":"strict_date_optional_time||epoch_millis"
}
}
}
},
"settings":{
"index":{
"refresh_interval":"1s",
"number_of_shards":"5",
"creation_date":"1513716676662",
"store":{
"type":"fs"
},
"number_of_replicas":"1",
"uuid":"qlj9xxxxxxxxxxxxxxoisA",
"version":{
"created":"2040699"
}
}
},
"warmers":{}
}
}
아. 초기 데이터는 Elasticsearch 구현에 사용 된 로그 문서 클래스의 스프링 부트 서비스 자동 삽입 시작시 채워집니다.
org.springframework.data.elasticsearch.annotation.DateFormat 클래스의 javadoc에서 날짜/시간 형식에 대한 좋은 참조를 찾았습니다. SOO 많은 시간 이름 형식과 없음은
http://nocf-www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html
sidenote. docker.elastic.co/elasticsearch/elasticsearch:6.1.1은 최신 탄력성 검색입니다. 나는 그것으로 전환하려고 노력할 것이다. – dskow