Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Search FullTextQuery getResultSize从不匹配getResultList().size()_Hibernate_Jpa_Lucene_Hibernate Search - Fatal编程技术网

Hibernate Search FullTextQuery getResultSize从不匹配getResultList().size()

Hibernate 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索引并重建了它们,但它仍然不起作用。我很困惑

有人知道为什么Hibernate Search
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张唱片符合。。。