2016-12-02 100 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的工作方式所致。如果可以的話,將文檔分割成單獨的索引並刪除整個索引是一種很好的做法,但根據用例,這並非總是可行。您可以發出刪除文檔而不檢查文檔是否存在;響應表明文檔是否被找到。 –