2017-09-25 56 views
0

以下的文檔的例子,如何進行分頁ElasticSearch結果,我在類型搜索這樣的:使用PHP API

$params = [ 
     'index' => $this->index, 
     'type' => $this->type, 
     "scroll" => "30s", 
     "size" => 10, 
     'body' => $json 
    ]; 

    $response = $this->es->search($params); 

現在$響應包括10個結果和_scroll_id。我如何使用它來分類我的結果?我在看這個例子

https://www.elastic.co/guide/en/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循環是指存儲所有結果放入一個變量並傳遞給模板。

要顯示的任何實際示例?

感謝

+0

您確定需要使用滾動嗎?你想得到多少結果? –

+0

@DarthKotik無論多少數據,滾動點 - 滾動不斷更改的數據都是無關緊要的,因此結果集中沒有兩次相同的文檔。 –

+0

我知道,但是如果你只需要幾千條記錄,'scroll'不是最好的方法,你可以在你的'search'查詢中設置'size' –

回答

0

scroll參數第一個請求後,您會收到正常的有效載荷(_shards,花了,打等),_scroll_id以及從elasticsearch。在hits中,您將有total找到的文檔數量,因此您有:每頁項目數和項目總數。

要找出頁數 - 你需要做簡單的數學。

要接收下一批數據從elasticsearch - 運行此:

curl 'localhost:9200/_search/scroll ' -d '{ 
    "scroll" : "30s", 
    "scroll_id" : "cXVlcnlUaGVuRmV0Y2g7NTsxMzU0MDQzNjY6QnNHMjd0bXlTZ3Ftd1dkblRUd3NQZzsxMDE1NzI4Mjc6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1NzI4MjY6ajFzVmtLQUdSaEduRWFRVi1GZE05UTsxMDE1ODAzODc6TURuUG5nbzRUVU9NUUFjSERqM2hIQTsxMDE1ODAzODg6TURuUG5nbzRUVU9NUUFjSERqM2hIQTswOw==" 
}' 

隨着滾動,你只能接受下一批,你不能特定網頁上跳。

+0

有沒有辦法像MySQL限制10,10;? – user3174311

+0

@ user3174311你可以使用'from'&'size',但如果你使用'scroll' - 你不能使用'from'&'size' ... –