[英]how to paginate ElasticSearch results using PHP API
按照文檔中的示例,我按如下方式搜索我的類型:
$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循環是否打算將所有結果存儲在變量中並將其傳遞給模板。
有實際的例子可以顯示嗎?
謝謝
在首次請求帶有scroll
參數的請求之后,您還將從elasticsearch接收正常的有效負載(_shards,takes,hits等)和_scroll_id
。 在hits
您將擁有找到的文檔total
,因此您擁有:每頁項目和項目總數。
要計算頁數-您需要做簡單的數學運算。
要從elasticsearch接收下一批數據-運行以下命令:
curl 'localhost:9200/_search/scroll ' -d '{
"scroll" : "30s",
"scroll_id" : "cXVlcnlUaGVuRmV0Y2g7NTsxMzU0MDQzNjY6QnNHMjd0bXlTZ3Ftd1dkblRUd3NQZzsxMDE1NzI4Mjc6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1NzI4MjY6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1ODAzODc6TURuUG5nbzRUVU9NUUFjSERqM2hIQTsxMDE1ODAzODg6TURuUG5nbzRUVU9NUUFjSERqM2hIQTswOw=="
}'
使用滾動,您只能接收下一批,不能跳到特定頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.