elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java SearchHits.getTotalHits()未给出ElasticSearch中文档的确切数量

Java SearchHits.getTotalHits()未给出ElasticSearch中文档的确切数量,java,elasticsearch,Java,elasticsearch,我想使用SearchHits.getTotalHits()获取与请求匹配的文档总数。但是,我发现通过SearchHits.getTotalHits()获得的值不等于SearchHits.getHits().length的总和。这正常吗 SearchHits searchHits = response.getHits(); int total = (int)searchHits.getTotalHits(); int k = 0; do { for (SearchHit hit : sea

我想使用
SearchHits.getTotalHits()
获取与请求匹配的文档总数。但是,我发现通过
SearchHits.getTotalHits()
获得的值不等于
SearchHits.getHits().length
的总和。这正常吗

SearchHits searchHits = response.getHits();
int total = (int)searchHits.getTotalHits();
int k = 0;
do {
    for (SearchHit hit : searchHits.getHits()) {
        k++;
    }
    response = esClient.prepareSearchScroll(response.getScrollId())
            .setScroll(scrollKeepAliveTime)
            .get();
} while (response.getHits().getHits().length != 0);
Assert.assertEquals(total, k);

  • 输出
java.lang.AssertionError:应为:但为:

一个问题是,您总是迭代
searchHits
,即第一次查询的结果

在每次滚动请求之后,需要将
searchHits
重新分配给
response.getHits()
,如下所示:

SearchHits searchHits = response.getHits();
int total = (int)searchHits.getTotalHits();
int k = 0;
do {
    for (SearchHit hit : searchHits.getHits()) {
        k++;
    }
    response = esClient.prepareSearchScroll(response.getScrollId())
            .setScroll(scrollKeepAliveTime)
            .get();
    searchHits = response.getHits();               <-- add this line
} while (searchHits.getHits().length != 0);        <-- modify this line
Assert.assertEquals(total, k);
SearchHits SearchHits=response.getHits();
int total=(int)searchHits.getTotalHits();
int k=0;
做{
for(SearchHit:searchHits.getHits()){
k++;
}
response=esClient.prepareSearchScroll(response.getScrollId())
.setScroll(scrollKeepAliveTime)
.get();

searchHits=response.getHits();一个问题是,您总是迭代
searchHits
,即第一次查询的结果

在每次滚动请求之后,需要将
searchHits
重新分配给
response.getHits()
,如下所示:

SearchHits searchHits = response.getHits();
int total = (int)searchHits.getTotalHits();
int k = 0;
do {
    for (SearchHit hit : searchHits.getHits()) {
        k++;
    }
    response = esClient.prepareSearchScroll(response.getScrollId())
            .setScroll(scrollKeepAliveTime)
            .get();
    searchHits = response.getHits();               <-- add this line
} while (searchHits.getHits().length != 0);        <-- modify this line
Assert.assertEquals(total, k);
SearchHits SearchHits=response.getHits();
int total=(int)searchHits.getTotalHits();
int k=0;
做{
for(SearchHit:searchHits.getHits()){
k++;
}
response=esClient.prepareSearchScroll(response.getScrollId())
.setScroll(scrollKeepAliveTime)
.get();

searchHits=response.getHits();这方面运气好吗?这方面运气好吗?