使用Hibernate Search查询并获得所有项目而无需分页

霍沃耶:

我在Spring Boot项目中使用Hibernate Search。在大多数情况下,这是满足我的需求的理想解决方案,除了在某些情况下,我必须通过全文搜索查询选择所有项时。

使用Hibernate Search时有机会避免Hibernate Search / Lucene分页吗?类似于Pageable.unpaged()我不想将页面大小设置Integer.MAX_VALUE为hack。但是,如果没有更好的解决方案,我将不得不采用这种方式。

烙印:

通常,您不应该在单个请求中提取所有匹配,因为可能会有数百万个匹配,而将它们全部加载很可能会导致内存问题。

如果您确实想执行此操作,则只需不对查询设置限制即可获取所有结果:

休眠搜索5:

Session session = /* ... */;
FullTextSession fullTextSession = Search.getFullTextSession( session );
Query luceneQuery = /* ... */;
FullTextQuery ftQuery = fullTextSession.createFullTextQuery( luceneQuery, MyEntity.class );
List<MyEntity> hits = ftQuery.list();

休眠搜索6:

Session session = /* ... */;
List<MyEntity> = Search.session( session ).search( MyEntity.class )
        .where( f -> /* ... */ )
        .fetchAllHits();

但是在很多情况下,由于点击次数占用了过多的内存,因此无法正常运行或效果不佳。

理想情况下,应改为使用滚动

这是Hibernate Search 5的示例:

FullTextQuery ftQuery = /*...*/;
ScrollableResults scroll = ftQuery.scroll();
scroll.beforeFirst();
int i = 0;
while ( scroll.next() ) {
    ++i;
    MyEntity entity = scroll.get()[0];

    // ... do things with the entity ...

    // Flush/clear the session periodically to free memory
    if ( i % 100 == 0 ) {
        // Only necessary if you changed entities
        session.flush();
        // Only necessary if you changed indexed entities
        fullTextSession.flushToIndexes();

        session.clear();
    }
}

对于Hibernate Search 6,API会有所不同。当前正在实施(HSEARCH-3323),并将在下一个Beta中提供。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Hibernate插入新项目?

选择所有具有“ data-”属性的元素,而无需使用jQuery

Hibernate使用MySQL生成无效的SQL查询

使用类名的JPA / Hibernate查询?

使用Hibernate Search自动完成

使用Hibernate在Maven项目中找不到hibernate.properties

如何使用Hibernate + Spring编写更新查询

使用Spring MVC和Hibernate实现分页

使用Hibernate Search / Lucene标记云?

使用CriteriaQuery和EntityManager(Hibernate)进行查询

从mapview获取所有GMSMarker并删除所有标记,而无需使用mapview.clear()

当我只需要计数而无需阅读Document-Db数据库中的所有文档时,如何使用Linq构造IQueryable查询?

使用所有运算符选择子查询而无需加入mysql

使用dif函数获得具有几个滞后的差而无需指定滞后数

如何使用jQuery获取所有日期而无需星期日?

Hibernate继承:使用条件联接查询

使用HasKey查找实体而无需在查询中明确指定所有键

如何使用Hibernate Query Language查询所有具有关联实体的实体?

在TFS中创建一个新的高级文件夹,而无需使用Team Explorer Everywhere命令行Linux下载所有项目

使用MATLAB生成所有组合而无需重复

使用Hibernate Spatial时无法获得连接

使用Hibernate Search查询枚举(枚举)的IndexedEmbedded列表

在HTML中隐藏所有按钮,而无需使用纯Javascript使用ID和Class

使用 Hibernate Search 时“过滤查询不支持排序”

Hibernate Search:如何正确使用通配符?

在 Hibernate 中使用 `in()` 调用命名查询

将 EntityGraph 与 Hibernate Search ORM 结合使用

使用带有分页的 DynamoDB 扫描操作而不是使用 GSI 查询是否正确,我需要表中的所有项目

如何使用分页列出表格中的所有项目