2017-01-16 4 views
0

Spring Data ElasticsearchでInstantフィールドを保存するように設計されたJodaDateTimeConverterクラスがあります。しかし、私はそれをどのように使うのですか?私は例を見つけませんでした。日付フィールドとしてインスタントを使用しようとSpring Data ElasticsearchでInstant/JodaDateTimeConverterを使用する方法

@Field(index = FieldIndex.analyzed, type = Date) 
private Instant someTime; 

は私にこの例外を与える:リポジトリを使用した場合

Caused by: 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) 
    ... 21 more 

答えて

0

私が見つけましたhttps://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapperで説明されているカスタムオブジェクトマッパーを使用してこの問題を回避し、Jacksonを構成するタイムスタンプとして瞬間をシリアル化します

public class CustomEntityMapper implements EntityMapper { 

private ObjectMapper objectMapper; 

public CustomEntityMapper(ObjectMapper objectMapper) { 
    this.objectMapper = objectMapper; 
    objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false); 
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true); 
    objectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); 
} 

@Override 
public String mapToString(Object object) throws IOException { 
    return objectMapper.writeValueAsString(object); 
} 

@Override 
public <T> T mapToObject(String source, Class<T> clazz) throws IOException { 
    return objectMapper.readValue(source, clazz); 
} 

}

Spring構成コード:

@Bean 
    @Autowired 
    public ElasticsearchTemplate elasticsearchTemplate(Client client) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.registerModule(new JavaTimeModule()); 
     return new ElasticsearchTemplate(client, new CustomEntityMapper(objectMapper)); 
    } 
0

は、考えてみましょう...

@Document(indexName = "ESINDEX", type = "TYPE", shards = 5) 
public class YourClass implements java.io.Serializable { 

@Id 
private String url; 

. 
. 
. 

@Field(type = FieldType.Date, format = DateFormat.date_optional_time) 
private Date created; 
@Field(type = FieldType.Date, format = DateFormat.date_optional_time) 
private Date updated; 

. 
. 
} 
+0

しかし、私はインスタントを使用しているDateを使用していない。 – Pragmatick

関連する問題