Laden...

NEST V 5.0.1 (ElasticSearch) Scrolling - mehr als 10000 Einträge auslesen

Erstellt von Marcel vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.705 Views
M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren
NEST V 5.0.1 (ElasticSearch) Scrolling - mehr als 10000 Einträge auslesen

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

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren

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);