2

我的实体类定义如下:

@Document(indexName = "payload-pojo")
public class PayloadPojo {
    @Id
    private String id;

    @Field(index = false,type = FieldType.Binary)
    byte[] payload;

}

和存储库定义如下:

public interface PayloadRepository  extends ElasticsearchRepository<PayloadPojo, String>  {
}

在 ES 6.8.1(Spring Data Elasticsearch 3.2.0)中,我设法毫无问题地存储和读取二进制数据。

现在我想迁移到 ES 7.5.2,所以我将项目迁移到使用 Spring Data Elasticsearch 4.0.0。从那时起,当我尝试调用类似payloadRepo.findAll()我得到转换异常的东西时: Failed to convert from type [java.lang.String] to type [byte]. 数据存储为 base64 编码字符串。

您是否知道发生了什么变化以及如何更改我的代码以正确读取此值?

谢谢

4

1 回答 1

1

FieldType.Binary为 4.0 版本添加。直到现在仍然缺少的是一个内部转换器,用于在byte[]和 base64 编码的字符串之间进行转换(elasticsearch 中的二进制字段类型始终是 base64 编码的)。

我刚刚添加了这个,应该在下一个快照版本中。

至于日期类型:我们添加了对不同Elasticsearch 日期格式的支持,并支持自定义日期模式 - 就像 Elasticsearch 所做的那样。这种支持可用于实现java.time.TemporalAccessor接口的类——基本上是java.time.*类。

我们放弃了对旧java.util.Date类的内部支持,转而支持这些java.time类 -java.sql.Timestamp派生自java.util.Date.

我们对 4.0 版本进行了重大更改,这是其中之一(提醒更新文档)。

于 2020-02-14T20:46:02.937 回答