我使用通过以下链接冬眠全文努力: hibernate/search/4.1/reference/en-US/html/getting-started如何在Hibernate全文搜索中获得总数?
基本上,它的工作原理,但我想知道如何获得总计数,而我执行全文查询,那么我可以告诉用户有多少结果以及在这样的查询中将有多少页面。
下面是代码(使用JPA创建和执行搜索):
EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager =
org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
em.getTransaction().begin();
// create native Lucene query unsing the query DSL
// alternatively you can write the Lucene query using the Lucene query parser
// or the Lucene programmatic API. The Hibernate Search DSL is recommended though
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(Book.class).get();
org.apache.lucene.search.Query query = qb
.keyword()
.onFields("title", "subtitle", "authors.name", "publicationDate")
.matching("Java rocks!")
.createQuery();
// wrap Lucene query in a javax.persistence.Query
javax.persistence.Query persistenceQuery =
fullTextEntityManager.createFullTextQuery(query, Book.class);
persistenceQuery.setFirstResult((page - 1) * PAGECOUNT);
persistenceQuery.setMaxResults(PAGECOUNT);
// execute search
List result = persistenceQuery.getResultList();
em.getTransaction().commit();
em.close();
在SQL中,我可以使用select count(*) from something
,但在这里我不知道该怎么做。我想每次只读取一页数据,并使用另一个API来计算总数。
对不起,我没没有清楚地描述我的问题,实际上我添加了两行代码:javax.persistence.Query persistenceQuery = fullTextEntityManager.createFullTextQuery(query,PSubject.class); \t \t persistenceQuery.setFirstResult((page - 1)* PAGECOUNT); \t \t persistenceQuery.setMaxResults(PAGECOUNT);所以我想知道另一种计算总数的方法,每次只获取一页实际数据。 – Tom 2012-03-26 08:44:39
根据您更改的要求更改了我的答案。现在代码看起来很脏;)它也不是很高效,因为你必须执行两次查询。希望有人想出更好的答案。 – magomi 2012-03-26 09:45:49