对 JPA 实体和 Elasticsearch 文档使用相同的 POJO

bal*_*teo 5 spring-data spring-data-elasticsearch

@Entity我使用和(来自 Spring Data Elasticsearch)注释了 JPA 实体@Document,因此我基本上将与 JPA 相同的 POJO 索引到 Elasticsearch 中。

这是一个好的且值得推荐的做法吗?

如果不是,还有什么替代方案?拥有两个不同的 POJO 并使用 Dozer 之类的工具将 JPA 实体映射到 ES 文档?

Joh*_*n R 3

我认为这取决于您的用例和对象模型的复杂性。对于一个简单的对象模型,我认为这很好。对于更复杂的对象模型,需要考虑以下几点:

  • 您真的想要/需要为实体上的所有属性建立索引吗?
  • 在索引之前是否需要转换对象?例如,扁平化关系。
  • 当您不希望加载延迟关系时,序列化到 ES 是否会导致加载它们?

如果不是,还有什么替代方案?拥有两个不同的 POJO 并使用 Dozer 之类的工具将 JPA 实体映射到 ES 文档?

看起来 Spring Data Elasticsearch正在使用 Jackson 进行序列化。这是一个非常基本的默认配置。如果这对您不起作用并且您不想引入 DTO 类型对象,您始终可以实现自己的映射器。