Spring数据elasticsearch:序列化joda时间

时间:2015-02-16 12:41:15

标签: java jodatime spring-data-elasticsearch

我使用elasticsearchTemplate.index()将文档索引到elasticsearch服务器。以下是我的文件的一部分:

    @Field(type = FieldType.Date, format = DateFormat.basic_date, index = FieldIndex.not_analyzed)
    private Date date;

保存文档时,日期以长格式(以毫秒为单位)保存,这是预期的行为。 现在,在同一个文档中,我想用JodaTime类型添加创建和修改的时间戳。以下是时间戳:

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
    @Field(type = FieldType.Date, format = DateFormat.basic_date, index = FieldIndex.not_analyzed)
    private DateTime createdDateTime;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
    @Field(type = FieldType.Date, format = DateFormat.basic_date, index = FieldIndex.not_analyzed)
    private DateTime modifiedDateTime;

现在,当我保存文档时,这两个文件存储为复杂对象(包含monthOfYear,dayOfMonth,hourOfDay等组件)。但是,我希望这些字段像日期字段一样存储(即长时间戳)。我应该做哪些改变?

我已经尝试使用jodaModule将ObjectMapper定义为我的应用程序中的bean,但它似乎没有完成这个技巧。有人可以帮忙吗?

感谢

1 个答案:

答案 0 :(得分:1)

要使用自己的ObjectMapper,您需要实现允许注入ObjectMapper的EntityMapper,

  @Bean
  @Autowired
  public EntityMapper mapper(ObjectMapper objectMapper) {
    return new ConfigurableEntityMapper(objectMapper);
  }

然后使用

创建模板
  @Bean
  public ElasticsearchOperations elasticsearchTemplate(Client client, EntityMapper mapper) {
    return new ElasticsearchTemplate(client, mapper);
  }

请参阅此处的示例:https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper