索引具有许多集合的实体

问题描述 投票:0回答:1

我有一个User实体,我希望索引。我目前正在研究Hibernate-Search并遇到性能问题。

我的POJO里面有很多Collections。但我并不打算填充这些字段。是否有人知道使用'MassIndexer'的方法?

这是我的POJO的片段

@Entity
@Indexed
public class User {
   @Id
   private long id;

   @Field
   private List<Address> addresses;   // Address.street is what I am looking for

   @Field
   private String firstName;

   @Field
   private String lastName;

   private List<AKA> akas;

   private List<Wife> wives;

   ...

}

在这个例子中,我希望避免索引任何没有用@Field标记的东西,但是当我运行MassIndexer时,我看到所有其他的Collections都被加载了。

目前,这是我重新编制索引的方式

fullTextSession.createIndexer().startAndWait();

关于如何避免这种情况以加快我的索引时间的任何想法?

java hibernate-search
1个回答
0
投票

Hibernate Search只会“导航”到构建索引所需的关系,因此它只会触发那些必要的惰性集合的加载。

如果Hibernate正在加载其他集合,则可能是由于这些集合未映射为惰性关联。确保所有关系都标记为惰性,这是一个很好的做法,因为你可以在运行时急切关注任何懒惰关系 - 例如在你的HQL中使用“fetch load”指令,但你不能做相反的事情。

在您的特定情况下,可能是由于您映射集合的方式造成的:使用没有排序列的List将被视为一个包,这是非常低效的。

© www.soinside.com 2019 - 2024. All rights reserved.