按照文档中的示例,我搜索我的类型:
$params = [
'index' => $this->index,
'type' => $this->type,
"scroll" => "30s",
"size" => 10,
'body' => $json
];
$response = $this->es->search($params);
现在$ response包含10个结果和一个_scroll_id。我如何使用它来分页我的结果?我正在看这个例子
然后医生建议这样做:
while (isset($response['hits']['hits']) && count($response['hits']['hits']) > 0) {
$scroll_id = $response['_scroll_id'];
$response = $client->scroll([
"scroll_id" => $scroll_id, //...using our previously obtained _scroll_id
"scroll" => "30s" // and the same timeout window
]
);
}
但不清楚我是否必须执行新请求,或者while循环是否将所有结果存储在变量中并将其传递给模板。
要展示的任何实际例子吗?
感谢
答案 0 :(得分:0)
在第一次请求scroll
参数后,您将收到普通有效负载(_shards,take,hits等)和_scroll_id
以及elasticsearch。在hits
中,您将找到total
个已找到的文档,因此您拥有:每页项目数和项目总数。
要计算页数 - 你需要做简单的数学运算。
要从elasticsearch接收下一批数据 - 请运行:
curl 'localhost:9200/_search/scroll ' -d '{
"scroll" : "30s",
"scroll_id" : "cXVlcnlUaGVuRmV0Y2g7NTsxMzU0MDQzNjY6QnNHMjd0bXlTZ3Ftd1dkblRUd3NQZzsxMDE1NzI4Mjc6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1NzI4MjY6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1ODAzODc6TURuUG5nbzRUVU9NUUFjSERqM2hIQTsxMDE1ODAzODg6TURuUG5nbzRUVU9NUUFjSERqM2hIQTswOw=="
}'
使用滚动条只能接收下一批,您无法跳转到特定页面。