2016-07-20 10 views
0

メッセージのオカレンスに基づいてelasticsearchからすべてのデータを取得しようとしていますが、スクロールを使用した場合、次のクエリは、ドキュメント= 0を返しますが、合計= 1954:スクロールでNEST 2.xを使用したElasticSearchクエリは結果を返しません

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

私はスクロールを使用する場合、私は、データを取得することができます最初の1000件のメッセージを削除し、取得する場合response.Documentは、空に来ている、と何か問題です私はスクロールをどのように使用していますか?

答えて

2

.SearchType(SearchType.Scan)を指定した場合、最初の応答にはドキュメントが含まれません。スクロール要求の応答に.ScrollIdを使用してスクロールすることによって返される.Totalプロパティの合計文書を表示します。

.SearchType(SearchType.Scan)を指定しないと、最初の応答に最初のドキュメントが含まれます。

これは、NESTではなくElasticsearchの違いです。 SearchType.Scan is actually deprecated in 2.1.0がありますが、Elasticsearch 2.xのすべてのマイナーバージョンをサポートしているため、NEST 2.xにはまだあります。

関連する問題