我有一个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
时,我看到所有其他的Collection
s都被加载了。
目前,这是我重新编制索引的方式
fullTextSession.createIndexer().startAndWait();
关于如何避免这种情况以加快我的索引时间的任何想法?
Hibernate Search只会“导航”到构建索引所需的关系,因此它只会触发那些必要的惰性集合的加载。
如果Hibernate正在加载其他集合,则可能是由于这些集合未映射为惰性关联。确保所有关系都标记为惰性,这是一个很好的做法,因为你可以在运行时急切关注任何懒惰关系 - 例如在你的HQL中使用“fetch load”指令,但你不能做相反的事情。
在您的特定情况下,可能是由于您映射集合的方式造成的:使用没有排序列的List
将被视为一个包,这是非常低效的。