Hibernate全文搜索分页

时间:2014-09-18 21:40:24

标签: java hibernate java-ee pagination hibernate-search

我正在使用Hibernate全文搜索。我目前正在使用:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search</artifactId>
    <version>4.5.1.Final</version>
</dependency>

我可以搜索好了。我的问题是:我如何对结果进行分页?有没有什么方法可以先说50个结果,然后在接下来的50个结果请求下一页时拨打电话?

我想到的一种方法是简单地获取最大ID,然后从Max + 1位置开始下一次搜索,假设ID是以自动增量顺序生成的。但我认为必须有更优雅的方法。

3 个答案:

答案 0 :(得分:7)

来自Hibernate search-query docs分页。

org.hibernate.Query fullTextQuery = 
    fullTextSession.createFullTextQuery( luceneQuery, Customer.class );
fullTextQuery.setFirstResult(15); //start from the 15th element
fullTextQuery.setMaxResults(10); //return 10 elements

答案 1 :(得分:0)

您可以将列表结果从列表转换为页面示例:如果您在列表用户中获得搜索。你可以像这样转换:

 NBPAGE: pages number you want 
 Pageable page=new PageRequest(0,NBPAGE,Sort.Direction.DESC,"date");
 Page<Annonce> PageList= new PageImpl<Annonce>(users ,page,users.size());

答案 2 :(得分:0)

要与Pageagle分页

  FullTextQuery fullTextQuery = getJpaQuery(bool.createQuery(), IconV2.class);
  fullTextQuery.setFirstResult(pageable.getPageSize() * pageable.getPageNumber())
               .setMaxResults(pageable.getPageSize());

  List<IconV2> results = fullTextQuery.getResultList();
  List<IconResourceV2> iconResult = results.stream()
      .map(iconV2 -> new IconResourceV2.IconResourceV2Builder(iconV2).build())
      .collect(Collectors.toList());

  return new PageImpl<>(iconResult, pageable, results.size());