簡體   English   中英

Hibernate 搜索,條件限制返回錯誤計數

[英]Hibernate search with Criteria restriction returning incorrect count

結果列表是完美的,但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

來自http://docs.jboss.org/hibernate/search/3.3/api/org/hibernate/search/jpa/FullTextQuery.ZFC35FDC70D5FC69D269883A822C7A5E

整數 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”的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM