简体   繁体   English

Hibernate 搜索,条件限制返回错误计数

[英]Hibernate search with Criteria restriction returning incorrect count

The result list is perfect but the getResultSize() is incorrect.结果列表是完美的,但getResultSize()不正确。

I've knocked up some code to illustrate.我敲了一些代码来说明。

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

From http://docs.jboss.org/hibernate/search/3.3/api/org/hibernate/search/jpa/FullTextQuery.html来自http://docs.jboss.org/hibernate/search/3.3/api/org/hibernate/search/jpa/FullTextQuery.ZFC35FDC70D5FC69D269883A822C7A5E

int getResultSize()整数 getResultSize()

Returns the number of hits for this search Caution: The number of results might be slightly different from getResultList().size() because getResultList() may be not in sync with the database at the time of query.返回此搜索的命中数 注意:结果数可能与 getResultList().size() 略有不同,因为 getResultList() 在查询时可能与数据库不同步。

You should try to use some of the more specialized queries like this one:您应该尝试使用一些更专业的查询,例如:

    Query query = new FuzzyQuery(new Term("title", q));
    FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(query, Film.class);
    int filmCount = fullTextQuery.getResultSize();

and this is how you do pagination requests (I'm guessing you have improperly implemented your paggination):这就是您执行分页请求的方式(我猜您的分页实现不当):

FullTextQuery hits = Search.getFullTextSession(getSession()).createFullTextQuery(query,      Film.class)
.setFirstResult((pageNumber - 1) * perPageItems).setMaxResults(perPageItems);

The above works for me every time.以上每次都对我有用。 You should keep in mind that the result of getResultSize() more of estimate.您应该记住,getResultSize() 的结果更多的是估计。 I use pagination a lot and I have experienced the number changing between pages.我经常使用分页,并且我经历过页面之间的数字变化。 So you should say "about xxxx" results.所以你应该说“关于xxxx”的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM