当前位置: 首页 > 知识库问答 >
问题:

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

傅志文
2023-03-14

我已经用@entity@Document(来自Spring Data Elasticsearch)注释了一个JPA实体,所以我基本上是在Elasticsearch中索引与JPA相同的POJO。

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

如果没有,还有什么选择?有两个不同的POJO,并使用类似Dozer的东西将JPA实体映射到ES文档?

共有1个答案

卢俊发
2023-03-14

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

  • 您真的想要/需要索引实体上的所有属性吗?
  • 在对对象进行索引之前,是否需要对其进行转换?例如,平坦化关系。
  • 序列化到ES是否会在不希望加载懒惰关系时导致它们被加载?

如果没有,还有什么选择?有两个不同的POJO,并使用类似Dozer的东西将JPA实体映射到ES文档?

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

 类似资料:
  • 我在ElasticSearch有索引。其中的文档具有重复的字段值。在查询结果中,我需要删除所有重复项,并且只获得不同的值。例如: PUT localhost:9200/人 POST localhost:9200/人/人 我试图通过字段“name”删除重复的术语聚合,但它不起作用。 获取localhost:9200/person/person/_search 结果: 聚合应用于name=“marry

  • 我正在使用Elasticsearch ch6.8,我在响应中得到了一个文档列表。一些文档具有相同的分数,但它们在响应列表中以相同的顺序出现。我想知道算法ES使用什么来对具有相同分数的文档进行排序?

  • 问题内容: 我有一个看起来像这样的架构: 我想找到b的所有值,其中b的值由2个或更多实体共享: 查询依据: 应该返回和。 问题答案: 您可以使用2 的字段对字段进行聚合,然后添加子聚合以找到匹配的字段:

  • 问题内容: 有一个实体类“ A”。A类可能具有相同类型“ A”的子级。如果“ A”是孩子,则也应保留它的父母。 这可能吗?如果是这样,我应该如何在Entity类中映射关系?[“ A”有一个id列。] 问题答案: 是的,这是可能的。这是标准双向@ManyToOne/ @OneToMany关系的特例。之所以特别是因为关系两端的实体都是相同的。JPA 2.0规范的第2.10.2节详细介绍了一般情况。 这

  • 问题内容: 有什么方法可以使用Logstash和csv文件从ElasticSearch删除文档?我阅读了Logstash文档,却一无所获,并尝试了一些配置,但是使用操作“删除”却没有任何反应 有人尝试过吗?我应该在配置的输入和过滤器部分添加一些特殊的东西吗?我使用文件插件作为输入,使用csv插件作为过滤器。 问题答案: 绝对可以按照您的建议去做,但是如果您使用的是Logstash 1.5,则需要使

  • 我从我的Spring项目中删除了Spring Roo,这是不必要的,而且在eclipse STS中构建花了很多时间。我执行了一个推入,我的实体对象现在包含了旧的Roo文件的源代码。 几乎没有什么变化,包括PersistentContext管理,这看起来很奇怪。事实上,我注意到,每次创建查询时,我都需要实例化实体类以获得EntityManager? 在我的实体类中,我有