Hibernate Search FullTextQuery getResultSize永远不会匹配getResultList()。size()

时间:2015-05-07 14:39:27

标签: hibernate jpa lucene hibernate-search

有没有人知道为什么Hibernate Search FullTextQuery(FullTextEntityManager)getResultSize()永远不会匹配getResultList().size()

我没有向setFirstResultsetMaxResult传递任何内容。

例如,我在一个字段上查询单词“truck”,resultSize表示50,345,但ResultList.size()是865.有没有人知道这些到目前为止的任何原因?我已经清除了Lucene索引并重建了它们,但它仍然无效。我很困惑。

    QueryBuilder qb = this.inventoryRepo.getSearchManager()
                .getSearchFactory().buildQueryBuilder()
                .forEntity(Inventory.class).get();

         BooleanJunction<?> junction = this.builder.createAlgorithm(
                    searchRequest, qb);

         org.apache.lucene.search.Query luceneQueryluceneQuery = junction.createQuery();

        }

        searchResult.setQuery(luceneQuery.toString());


        FullTextQuery jpaQuery = this.inventoryRepo.getSearchManager()
                .createFullTextQuery(luceneQuery, Inventory.class);

        jpaQuery.limitExecutionTimeTo(20000,
                TimeUnit.MILLISECONDS);

        List<Inventory> results = jpaQuery.getResultList();

        log.debug("Total Search Result Size: " + jpaQuery.getResultSize());
        searchResult.setTotalSize(jpaQuery.getResultSize());

1 个答案:

答案 0 :(得分:1)

参考 FullTextQuery documentation getResultSize 方法section

  

int getResultSize()

     

返回:此搜索的匹配数。

     

警告:数量   结果可能与list()。size()略有不同,因为list()   如果索引在查询时与数据库不同步。

结果会略有不同,但我认为情况并非如此,因为这里的limitExecutionTimeTo调用会产生逻辑上的巨大差异,这会阻止查询获取所有结果,您可以看到它在文档中,差异是由这段代码引起的:

jpaQuery.limitExecutionTimeTo(20000,
            TimeUnit.MILLISECONDS);

哪个只执行20秒的查询并且只返回部分结果,这就是为什么你得到的结果较少,因为查询还没有完成获取所有结果。

您可以使用hasPartialResults()来测试是否已提取所有结果。