Elasti c NEST Scroll API переполнение исключение - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь прочитать все данные из определенного индекса с помощью API прокрутки (ElasticSearch.NET-7.4.2), но в итоге получаю следующее исключение

# FailureReason: Unrecoverable/Unexpected BadResponse while attempting POST on http://localhost:9200/_search/scroll?pretty=true&error_trace=true
 - [1] BadResponse: Node: http://localhost:9200/ Exception: OverflowException Took: 00:00:00.0490000

Код выглядит следующим образом:

[ElasticsearchType]
public class SPEXEC
{
    [Text(Name="event_type")]
    //[JsonProperty("event_type")]
    public  string EventType{ get; set; }

    [Text(Name="client_app_name")]
    //[JsonProperty("client_app_name")]
    public  string ClientAppName{ get; set; }
}
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
    .DefaultIndex("filebeat-7.5.2")
    .EnableDebugMode()
    .PrettyJson()
    .RequestTimeout(TimeSpan.FromMinutes(2));
var searchResponse = client.Search<SPExec>(s => s.Index("filebeat-7.5.2-2020.03.19-000002").MatchAll().Scroll("3m").Size(1000));
while (searchResponse.Documents.Any())
{
    var resp = new ISearchResponse<SPExec>
    {
        Results = searchResponse.Documents,
        ElapsedMilliseconds = (int)searchResponse.Took,
    };
    searchResponse = client.Scroll<SPExec>("1m", searchResponse.ScrollId); // Overflow exception
}
client.ClearScroll(c => c.ScrollId(searchResponse.ScrollId));

Целью использования Scroll API является чтение данных из Elasti c для генерации отчетов. Я не сталкиваюсь с ошибками при использовании прокрутки в консоли разработчика.

POST filebeat-7.5.2-2020.03.19-000002/_search?scroll=1m
{
  "query": {
    "match_all": {}
  }
  , "size": 1000
}

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAX3sWOGZwN1NKUVVUNlc1dEFxbDRSZmxtQQ=="
}

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAX3sWOGZwN1NKUVVUNlc1dEFxbDRSZmxtQQ=="
}

Если есть что-то очевидное, что я упустил при использовании Scroll API, направьте меня в правильном направлении. Я также запустил приложение, используя ElasticSearch-7.6.1, и получаю то же исключение.

РЕДАКТИРОВАТЬ

Я также пытался использовать search_after , что, как предлагается в документации, предназначено для пользовательских запросов в реальном времени, которые также не были выполнены с исключением переполнения.

    var searchResponse = client.Search<SPEXEC>(s => s.Index(index)
            .MatchAll()
            .Size(1000)
            .Sort(ss => ss
            .Ascending(p => p.Timestamp)
            .Descending(p => p.ElasticID)));
    while (true)
    {
        if (searchResponse.Documents.Any())
        {
           hitTotal += searchResponse.Hits.Count;
           var searchAfter = searchResponse.Hits.Last().Sorts.ToArray();
           searchResponse = client.Search<SPEXEC>(s => s.Index(index)
              .MatchAll()
             .Size(1000)
             .Sort(ss => ss
                    .Ascending(p => p.Timestamp)
                    .Descending(p => p.ElasticID))
             .SearchAfter(searchAfter));
      }
      else
     {
        System.Threading.Thread.Sleep(5 * 60 * 1000);
     }
   }
...