簡體   English   中英

如何使用PHP API對ElasticSearch結果進行分頁

[英]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。 如何使用它對結果進行分頁? 我正在看這個例子

https://www.elastic.co/guide/zh-CN/elasticsearch/client/php-api/current/_search_operations.html#_scrolling

然后文檔建議這樣做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM