java - Hibernate 搜索 IndexedEmbedded 内存不足

标签 java hibernate lucene hibernate-search

我有两个实体(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/

相关文章:

java - Hibernate + ehcache 二级缓存未命中的简单示例

hibernate - SpringBoot hibernate gradle字节码增强

java - Lucene 禁止了不应该出现的子句 "fuzzyfied"

java - 使用什么方法转义所有可转义字符

java - 从 native 查询返回单个投影

java - Java 8 中新引入的 Arrays.parallelPrefix(...) 是如何工作的?

Hibernate一对多关系删除子对象

lucene.net - TermQuery 不会返回已知的搜索词,但 WildcardQuery 会返回

search - 使用 Lucene.NET 在通配符搜索中转义特殊字符

java - 有没有办法从 Apache commons-cli 选项值中自动去除前导空格?