微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Elasticsearch滚动扫描查询未返回所有文档,缺少第一组文档

我正在尝试滚动我的ES索引并获取所有文档,但看起来好像一直缺少初始滚动返回的第一组文档.例如,如果我的滚动大小为10,并且滚动后查询返回的总数为100,那么我将只有90个文档.关于我所缺少的任何建议吗?

这是我目前尝试过的方法

$json = '{"query":{"bool":{"must":[{"match_all":{}}]}}}';

$params = [
    "scroll" => "1m",
    "size" => 50,
    "index" => "myindex",
    "type" => "mytype",
    "body" => $json 
];

$results = $client->search($params);
$scroll_size = $results['hits']['total']; // returns total docs that match query
$s_id = $results['_scroll_id'];

print " total results:   " . $scroll_size;

//scroll
$count = 0;
while ($scroll_size > 0) {
    print "  SCROLLING...";
    $scroll_results = $client->scroll([
        'scroll_id' => $s_id,
        'scroll' => '1m'
    ]);

    // get number of results returned in the last scroll
    $scroll_size = sizeof($scroll_results['hits']['hits']);
    print "  scroll size: " . $scroll_size;

    // do something with results
    for ($i=0; $i<$scroll_size; $i++) {
        $count++;
    }
}
print " total id count: " . $id_count;

解决方法:

您执行的第一个查询将返回文档数,也将返回文档.第一个查询是建立滚动并获取第一组文档.处理完第一组结果后,可以使用scroll_id获取下一页,依此类推.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐