2016-06-22 4 views
0

NEST 2.3.2を使用して大量のドキュメントを取得する方法を理解しようとしています。 (サーバー管理者が設定した)レスポンスのドキュメント数には制限があるため、Scrollを使用して安全に使用したいと考えています。NESTを使用してElasticsearchで未知のドキュメントを取得する

私はthisを読んだことがありますが、NEST 2.3.2ライブラリを使用して達成する方法が見つかりませんでした。このdocumentationは1.x用で、2.xでは動作しません。

私はSearchRequestSearchType = Elasticsearch.Net.SearchType.Scanを設定しようとすると、具体的には、自動的に/_search?search_type=scanにリクエストを送信しているため、サーバは単に「search_phase_execution_exception」を返す「スキャンするときにスクロールが提供されなければなりません...」。しかし、スクロールIDの取得方法はわかりません。

これを達成する方法を知っている人はいますか?私は、それらがすべて取得されるまで、いくつかの要求を伴う可能性のある文書をスクロールしたい。誰かが非常に役に立つサンプルコードを提供できれば。どうもありがとうございました。

答えて

2

私はこの問題を解決するために、すべてのドキュメントをインデックスに登録してから処理する必要がありました。私はスクロールを使った。あなたはhere

var scanResults = client.Search<IndexName>(s => s 
       .From(0) 
       .Size(20) //any size you can give 
       .MatchAll() 
       .Source(so => so 
       .Include(fi => fi.Field(fieldName)) 
       .SearchType(Elasticsearch.Net.SearchType.Scan) 
       .Scroll("5m") //time for which the scrollId is saved. Can be anything. 
      ); 

      var results = client.Scroll<IndexName>("10m", scanResults.ScrollId); 

      while (results.Documents.Any()) 
      { 
       //do whatever you want to do from the resultant documents 

       results = client.Scroll<IndexName>("10m", results.ScrollId); 
      } 

詳しい情報についてscroll

・ホープ、このことができますから、私の質問を見ていることができます。

+1

ありがとうございます。さて、私は平文のバージョンを見て、NEST APIのパラメータを推測することでそれを理解しました。キーは 'SearchRequest'オブジェクトに' Scroll'プロパティを設定し、それを 'Search'メソッドに渡すことです。 'Scroll'が空でない値に設定されている場合、idを生成します。私はまだ詳細を把握する必要がありますが、それはうまくいくと思います。 – LLS

+0

あなたに役立つかどうか試してみてください。 – ASN

関連する問題