Hibernate Search FullTextQuery getResultSize从不匹配getResultList().size()
有人知道为什么Hibernate SearchHibernate Search FullTextQuery getResultSize从不匹配getResultList().size(),hibernate,jpa,lucene,hibernate-search,Hibernate,Jpa,Lucene,Hibernate Search,有人知道为什么Hibernate SearchFullTextQuery(FullTextEntityManager)getResultSize()与getResultList().size()不匹配吗 我没有向setFirstResult或setMaxResult传递任何内容 例如,我在一个字段上查询单词“truck”,结果大小为50345,但ResultList.size()为865。有人知道为什么这些会如此遥远吗?我已经清除了Lucene索引并重建了它们,但它仍然不起作用。我很困惑
FullTextQuery
(FullTextEntityManager)getResultSize()
与getResultList().size()不匹配吗
我没有向setFirstResult
或setMaxResult
传递任何内容
例如,我在一个字段上查询单词“truck”,结果大小为50345,但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());
QueryBuilder qb=this.inventoryRepo.getSearchManager()
.getSearchFactory().buildQueryBuilder()
.forEntity(Inventory.class).get();
布尔连接=this.builder.createAlgorithm(
搜索请求(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,
时间单位(毫秒);
List results=jpaQuery.getResultList();
debug(“总搜索结果大小:+jpaQuery.getResultSize());
searchResult.setTotalSize(jpaQuery.getResultSize());
指的是和getResultSize方法:
intgetResultSize()
返回:此搜索的点击数
注意:
结果可能与list()稍有不同。size()是因为list()的原因
如果索引在查询时与数据库不同步
结果会略有不同,但我认为这里的情况并非如此,因为这里的调用在逻辑上造成了巨大的差异,这阻止了查询获取所有结果,您可以在文档中看到,因此差异是由以下代码造成的:
jpaQuery.limitExecutionTimeTo(20000,
TimeUnit.MILLISECONDS);
这将只执行查询20
秒,并且只返回部分结果,这就是为什么您得到的结果较少,因为查询尚未完成所有结果的获取
您可以使用来测试是否已获取所有结果。如果索引和数据库同步,则结果实际上不应存在差异。由于FulltextQuery#getResultSize()没有从数据库加载实体,而只是从Lucene查询返回命中计数,因此有可能会出现不同步的情况,但在其他情况下,它应该可以工作,特别是在您说您重建了索引的情况下。也许看到一些代码会有帮助。我在上面添加了我的相关代码。。。我只是省略了在查询中添加我正在搜索的所有元素的部分,这与resultSize()与list.size()完全不同没有任何关系,因为您知道数据,这是您期望的结果大小?数据库中是否有865个实体符合您的搜索条件?或者50345?你在使用分片、多租户或者类似的东西吗?是否启用了任何筛选器?这是一个空间查询吗?当你通过QueRealBuffer-A.()创建它时,它是否匹配?因此,如果我搜索“truck”,我会得到424189条,但在表的数据库中总共只有53556条记录。如果我搜索“基座”,我得到的列表大小是27,但结果大小是567。事实上,大约有27张唱片符合。。。