1

我正在使用 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,但它似乎并没有成功。有人可以帮忙吗?

谢谢

4

1 回答 1

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

于 2015-09-03T14:53:16.100 回答