【问题标题】:Hibernate search with Criteria restriction returning incorrect count具有条件限制的休眠搜索返回不正确的计数
【发布时间】:2011-07-07 19:44:34
【问题描述】:

结果列表完美,但 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

【问题讨论】:

    标签: java hibernate hibernate-search


    【解决方案1】:

    来自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();
    

    这就是您执行分页请求的方式(我猜您的分页实现不当):

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

    以上内容每次都对我有用。您应该记住,getResultSize() 的结果更多的是估计。我经常使用分页,并且我经历过页面之间的数字变化。所以你应该说“关于xxxx”的结果。

    【讨论】:

    • 可爱。我已经按照您的建议采用了 getResultList().size() ,看起来还不错。
    • 哇!对不起,我兴奋的有点匆忙。 getResultList().size() 只返回返回数组的大小 - 上限为 10 我需要的是匹配记录的总数以管理分页。
    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2014-07-06
    相关资源
    最近更新 更多