2016-12-02 26 views
0

をトリガーI次の呼び出しがあります。ElasticSearch呼び出しが例外(C#の)

var Exists = Driver.DocumentExists<Mydata>(Id).Exists; 

Idがパラメータとして渡されると、文書が存在する場合、それはチェックします。予想通り コールの動作、しかし、それは巻き込まれるいくつかの例外がスローされますが、文書が発見されていないすべての呼び出しにデバッガで表示されます:

Exception: Exception thrown: 'System.Net.WebException' in System.dll 
("The remote server returned an error: (404) Not Found."). 
Exception thrown: 'System.Net.WebException' in System.dll 
("The remote server returned an error: (404) Not Found.") 

これは、デバッガでコードの実行がめちゃくちゃ遅くなっています。私は何かを逃していますか、それとも期待される行動ですか?

答えて

0

The default IConnection implementation(実際のHTTP要求を行うタイプ)デスクトップのNESTでは、CLRはHttpWebRequestを内部的に使用し、404 HTTPステータスコードが返されるとWebExceptionをスローします。

クライアントのデフォルトの動作は例外を投げることではなく、一部のエンドポイントは404(NESTが知っている)を正しく返すことができるため、例外は内部的に捕捉されますが、デバッガにはまだ表示されます。

+0

私はその背後にある論理を理解しています。問題は、存在しないかもしれない/存在しないかもしれない多くの文書を削除しなければならないコードを作ることである。私たちの場合、時々何万もの文書を削除しなければならず、検索が優れているため悲しいですが、それは非常に遅いので、弾性検索は完全に使用できなくなります。 – Thomas

+0

Luceneがカバーの下で動作する方法のため、数万のドキュメントを削除することは、比較的、Elasticsearchで最悪の動作です。可能であれば、ドキュメントを別々のインデックスに分割し、インデックス全体を削除することをお勧めしますが、ユースケースによっては必ずしも可能ではありません。文書が存在することを確認せずに削除文書を発行することができます。応答は、文書が見つかったかどうかを示します。 –

関連する問題