2016-12-02 97 views
0

我有以下电话:ElasticSearch调用DocumentExists触发异常(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请求的类型)在桌面CLR的NEST中使用内部HttpWebRequest,在返回404 HTTP状态代码时抛出WebException。由于客户端的默认行为不是抛出异常,并且某些端点可以正确地返回404(这是NEST知道的),所以异常在内部被捕获,但仍然可以在调试器中显示。

+0

我了解背后的逻辑;问题在于它使代码必须删除大量可能/不可能存在的文档,而且速度太慢。在我们的情况下,我们有时候必须删除数以万计的文档,而且速度很慢,导致弹性搜索完全无法使用,这很令人难过,因为搜索非常出色。 – Thomas

+0

相对而言,删除数以万计的文档是Elasticsearch中表现最差的操作,这是由于Lucene的工作方式所致。如果可以的话,将文档分割成单独的索引并删除整个索引是一种很好的做法,但根据用例,这并非总是可行。您可以发出删除文档而不检查文档是否存在;响应表明文档是否被找到。 –