Hallo.
Wir haben einen ElasticSearch Server der Mailserver Logs beinhaltet. Diese Daten gilt es nun abzufragen. Das klappt auch alles soweit. Leider kommen dort extrem viele Daten rein, so dass ich befürchten muss mit einer einzelnen Abfrage die Obergrenze von 10000 zu sprengen.
Die Lösung ist laut meinen Internet-Rechnerchen das Scolling. So dass ich mehrere Anfragen an den Server stellen kann bis keine Daten mehr da sind.
Ich finde im Netz einige Besipiel, wie zum Besipiel dieses: http://stackoverflow.com/questions/31327814/scroll-example-in-elasticsearch-nest-api
Dort wird ein Enum (SearchType.Scan) verwendet den es so seit längerem nicht mehr gibt:
https://github.com/elastic/elasticsearch-net/commit/fee93e32fc779fc59e400eb53f6285d6aa7f38a9 (15. März 2016)
Jetzt wäre meine Frage ob jemand ein Beispiel hat wie man mehr als 10000 Einträge mit dem NEST Client 5 auslesen kann. Danke
Nach sehr viel "Try and Error" hab ich eine Lösung.
Für die Nachwelt..
List<MyObject> result = new List<MyObject>();
var r1 = client.Search<MyObject>(s => s
.AllTypes()
.Size(PAGESIZE)
.Query(q => query)
.Scroll(SEARCHCONTEXTALIVE) // Erzeugt eine ScrollID
.Sort(sort => sort.Descending(f => f.datetime)));
if (!r1.IsValid) ThrowError();
int page = 0;
do
{
// Zeilen zu Rückgabe hinzufügen
page++;
foreach (var doc in r1.Documents)
result.Add(doc);
if (r1.Documents.Count < PAGESIZE) break; // Ende
var scrollid = r1.ScrollId;
Nest.ScrollRequest sreq = new Nest.ScrollRequest(scrollid, SEARCHCONTEXTALIVE);
r1 = client.Scroll<MyObject>(sreq);
if (!r1.IsValid) ThrowError();
} while (true);