2017-02-07 49 views
0

elasticsearch.net NESTスクロールコールが同じ結果を返す理由を理解しようとしています。私は、現在のページを追跡し、バッチサイズと共に渡されるC#アプリケーションの外部ループを持っています。彼らは内に含まれているオブジェクトと一対多の関係でネストされた要素のIDは、IDのリストを呼び出しElasticsearch.net - NESTスクロールは同じ結果を返し続けます

List<int> ids = GetIds(); 
int count = _batchSize; 
int currentPage = 0; 

while (count == _batchSize) 
{ 
    var results = Execute(client => client.Search<Invoice>(s => s 
       .Index(indexName) 
       .Query(q => q 
       .Terms(n => n 
       .Field(f => f.Items.FirstOrDefault().MyInformation.FirstOrDefault().ItemID) 
       .Terms(ids))) 
       .Size(batchSize) 
       .From(currentPage * batchSize) 
       .Scroll("1m") 
      )); 

    DoSomethingWithResults(); 
    count = results.Count(); 
    currentPage++; 
} 

以上である:私は、コードを簡略化してきました。だからこそ私はスクロールを使いたいのですが、返されるInvoiceオブジェクトの数がわからないからです。これが呼び出されるたびにcurrentPageは1だけインクリメントされます。スクロールの次のバッチが返されると仮定していました。

私はこれをページングフローの多くとして見ているので、間違っていると思います。

答えて

1

これはあまりにもScroll APIの仕組みではありません。

  1. 最初の要求は.Scroll()時間を指定し、.Search<T>()(又は)です。応答には最初のドキュメントセットが含まれます
  2. その後のリクエストは.Scroll<T>(またはScrollAsync<T>())になり、以前のリクエストからスクロールIDを渡し、スクロールをElasticsearchで開いたままにします。応答に文書が含まれなくなるまで、スクロール要求を送信するループ。

this answer for an example

+1

おかげで再びラスを見てみましょう! 最初の検索とその後の検索では、異なる種類のコールが使用されていたことに気づいていませんでした。 すべては現在計画通りに動作しています、私は興奮しています! – CorribView

+0

よろしくお願いします! –

関連する問題