我有两个实体(entityA和entityB),一个实体包含另一个带有@IndexedEmbedded的实体,因为当我搜索时,我也想通过entityB查询,并返回entityA。
关系(简化)如下:
public class EntityA {
private String name;
@OneToMany
@IndexedEmbedded
private List<EntityB> children;
}
public class EntityB {
@ManyToOne
@ContainedIn
private EntityA parent;
private String childName;
}
我现在遇到问题,因为相对而言,entityA 中的“子项”最多可以有 100k 个项目。无论我使用 FullTextSession.index 还是 MassIndexer,这都会导致 OutOfMemory 问题。
我实际上可以删除 EntityA 中的 @OneToMany 映射,因为当我想要访问 EntityB 时,我通常会进行一些过滤和分页的查询,但如果我删除 @OneToMany,那么 Hibernate Search 将不会索引我的 EntityB。
是否有办法让 FullTextSession.index 对“子项”进行基于批处理的索引?
最佳答案
我觉得你应该删除像一对多和多对一这样的关系,并编写一个联接查询来获取所需大小的结果,获取 100k 行会杀死内存。
谢谢, 子哈希
关于java - Hibernate 搜索 IndexedEmbedded 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858243/