有没有人知道为什么Hibernate Search FullTextQuery
(FullTextEntityManager)getResultSize()
永远不会匹配getResultList().size()
?
我没有向setFirstResult
或setMaxResult
传递任何内容。
例如,我在一个字段上查询单词“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());
答案 0 :(得分:1)
参考 FullTextQuery documentation 和 getResultSize 方法section:
int getResultSize()
返回:此搜索的匹配数。
警告:数量 结果可能与list()。size()略有不同,因为list() 如果索引在查询时与数据库不同步。
结果会略有不同,但我认为情况并非如此,因为这里的limitExecutionTimeTo调用会产生逻辑上的巨大差异,这会阻止查询获取所有结果,您可以看到它在文档中,差异是由这段代码引起的:
jpaQuery.limitExecutionTimeTo(20000,
TimeUnit.MILLISECONDS);
哪个只执行20
秒的查询并且只返回部分结果,这就是为什么你得到的结果较少,因为查询还没有完成获取所有结果。
您可以使用hasPartialResults()来测试是否已提取所有结果。