2017-03-07 4 views
3

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; 

答えて

3

最初のクエリは、また、文書を返します。最初のクエリは、スクロールを確立し、ドキュメントの最初のセットを取得することです。最初の結果セットを処理したら、scroll_idを使用して次のページを取得することができます。

0

ありがとう@Ramdev。うん、私はそれを少し掘った後に気づいた。誰にでも私のために働いたのは次のようなものです:

$json = '{"query":{"bool":{"must":[{"match_all":{}}]}}}'; 
$count = 0; 
$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; 

// first set of scroll results 
for ($i=0; $i<$size; $i++) { 
    $count++; 
} 
//scroll 
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; 
関連する問題