2016-07-20 18 views
0

Ich versuche, alle Daten aus dem Elasticsearch basierend auf einer Nachricht auftreten abrufen, dachte ich, dass, wenn ich Scroll ich Schleife konnte bis zum Ende der Dokumentensuche aber folgende Abfrage gibt Dokumente = 0, aber Total = 1954:ElasticSearch Query mit NEST 2.x mit Scroll liefert kein Ergebnis

var response = client.Search<Log4Net>(s => s 
              .Query(q => q.QueryString(qs => qs 
              .DefaultField(m => m.Message).Query("\"" + message + "\""))) 
              .SearchType(SearchType.Scan) 
              .Scroll("60s")); 
     while (response.Documents.Any()) 
     { 
      var request = new BulkRequest(); 
      request.Refresh = true; 
      request.Consistency = Consistency.One; 
      request.Operations = new List<IBulkOperation>(); 
      foreach (var item in response.Documents) 
      { 
       request.Operations.Add(new BulkIndexOperation<Log4Net>(item)); 
      } 

      var result = client.Bulk(request); 

      response = client.Scroll<Log4Net>("60s", response.ScrollId); 
     } 

die response.Document kommt leer, wenn ich die Scroll verwenden, wenn ich die ersten 1000 Nachrichten entfernen und erhalte ich die Daten bekommen, etwas stimmt nicht mit Wie verwende ich die Schriftrolle?

Antwort

2

Wenn Sie .SearchType(SearchType.Scan) angeben, enthält die erste Antwort keine Dokumente. Es gibt Ihnen die gesamten Dokumente in der .Total-Eigenschaft, die durch das Scrollen mit dem .ScrollId für die Antwort in einer Bildlaufanforderung zurückgegeben werden. Wenn Sie nicht.SearchType(SearchType.Scan) angeben, enthält die erste Antwort den ersten Satz von Dokumenten.

Dies ist ein Unterschied in Elasticsearch und nicht NEST. SearchType.Scan is actually deprecated in 2.1.0, ist aber immer noch in NEST 2.x, da es alle kleineren Versionen von Elasticsearch 2.x unterstützt.