2017-02-07 2 views
0

Ich versuche zu verstehen, warum ein elasticsearch.net NEST Scroll-Aufruf die gleichen Ergebnisse zurückgibt. Ich habe eine äußere Schleife in meiner C# -Anwendung, die die aktuelle Seite verfolgt und zusammen mit der Stapelgröße übergeben wird.Elasticsearch.net - NEST Scroll behält die gleichen Ergebnisse

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++; 
} 

In der oben rufen Sie die Liste der IDs innerhalb IDs von verschachtelten Elementen in einer Eins-zu-Beziehung mit den Objekten sie enthalten sind: Ich habe den Code vereinfacht. Deshalb möchte ich scroll verwenden, da ich nicht weiß, wie viele Rechnungsobjekte zurückgegeben werden. Jedes Mal, wenn dies aufgerufen wird, wird currentPage um 1 inkrementiert. Ich hatte angenommen, dass der nächste Stapel aus dem Bildlauf zurückgegeben wird.

Ich denke, ich mache etwas falsch, da ich dies als mehr von einem Paging-Flow betrachte.

Antwort

1

Dies ist nicht ganz so, wie die Scroll API funktioniert.

  1. erste Anfrage zu .Search<T>() (oder), der angibt .Scroll() Zeit. Die Antwort enthält den ersten Satz von Dokumenten
  2. Nachfolgende Anforderungen sind .Scroll<T> (oder ScrollAsync<T>()), die Scroll-ID von der vorherigen Anforderung übergeben und eine Scroll-Zeit, um die Rolle auf Elasticsearch geöffnet zu lassen. Senden Sie Scroll-Anforderungen in der Schleife, bis eine Antwort keine Dokumente enthält.

Werfen Sie einen Blick auf this answer for an example

+1

Thanks again Russ! Ich hatte nicht bemerkt, dass die ersten und nachfolgenden Abrufvorgänge unterschiedliche Anrufarten verwendeten. Alles funktioniert funktioniert wie geplant jetzt, ich bin aufgeregt! – CorribView

+0

Super zu hören! –

Verwandte Themen