jas*_*ace 4 java hibernate hibernate-search
结果列表很完美,但getResultSize()不正确.
我已经敲了一些代码来说明.
Criteria criteria2 = this.getSession().createCriteria(Film.class);
Criterion genre = Restrictions.eq("genreAlias.genreName", details.getSearch().getGenreName());
criteria2.createAlias("genres", "genreAlias", CriteriaSpecification.INNER_JOIN);
criteria2.add(genre);
criteria2.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult());
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.createFullTextEntityManager(entityManager);
org.apache.lucene.queryParser.QueryParser parser2 = new QueryParser("title", new StopAnalyzer() );
org.apache.lucene.search.Query luceneQuery2 = parser2.parse( "title:"+details.getSearch()");
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery( luceneQuery2, Film.class);
fullTextQuery.setCriteriaQuery(criteria2);
fullTextQuery.getResultList()); // Returns the correctly filtered list
fullTextQuery.getResultSize()); // Returns the retsult size without the genre resrtiction
Run Code Online (Sandbox Code Playgroud)
来自http://docs.jboss.org/hibernate/search/3.3/api/org/hibernate/search/jpa/FullTextQuery.html
int getResultSize()
返回此搜索的命中数警告:结果数可能与getResultList().size()略有不同,因为getResultList()在查询时可能与数据库不同步.
你应该尝试使用一些像这样的更专业的查询:
Query query = new FuzzyQuery(new Term("title", q));
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(query, Film.class);
int filmCount = fullTextQuery.getResultSize();
Run Code Online (Sandbox Code Playgroud)
这就是你如何做分页请求(我猜你没有正确实现你的分页):
FullTextQuery hits = Search.getFullTextSession(getSession()).createFullTextQuery(query, Film.class)
.setFirstResult((pageNumber - 1) * perPageItems).setMaxResults(perPageItems);
Run Code Online (Sandbox Code Playgroud)
以上每次都适合我.你应该记住,getResultSize()的结果更多的是估计.我经常使用分页,我经历过页面之间的数字变化.所以你应该说"关于xxxx"的结果.
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |