2016-12-02 3 views
0

트리거 I 다음 호출을 가지고ElasticSearch 호출 예외 (C 번호)

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

이드 매개 변수로 전달하여 문서가 존재하는 경우를 검사한다.

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.") 

이 디버거에 미친 듯이 느리게 실행 코드를 만드는 : 호출은 예상대로, 그러나 그것은 잡힐 몇 가지 예외를 throw하지만 문서가 발견되지 않는 경우 모든 호출에 디버거에 표시 동작합니다. 나는 뭔가를 놓치고 있는가? 아니면 예상되는 행동인가? 데스크탑 용 CLR 둥지

답변

0

The default IConnection implementation (실제의 HTTP 요청을 만드는 타입) 404 HTTP 상태 코드가 리턴 될 때 발생되는 WebException를 내부적 HttpWebRequest을 이용한다.

클라이언트의 기본 동작은 예외를 throw하지 않으며 일부 끝점에서 NEST가 알 수있는 404를 매우 올바르게 반환 할 수 있기 때문에 예외가 내부적으로 catch되지만 여전히 디버거에 나타날 수 있습니다.

+0

나는 논리에 대해 이해하고있다. 문제는 존재할 수도 있고 없을 수도있는 많은 문서를 삭제해야하는 코드를 만든다는 것입니다. 우리의 경우에는 수만 개의 문서를 지워야 할 때가 있습니다. 속도가 너무 느려서 탄성 검색이 완전히 사용할 수 없게됩니다. 이는 검색이 우수하여 슬프다는 것입니다. – Thomas

+0

수천 개의 문서를 삭제하는 것은 상대적으로 Lucene이 커버하에 작동하는 방식 때문에 Elasticsearch에서 최악의 수행 작업입니다. 가능한 경우 문서를 별도의 인덱스로 분할하고 전체 인덱스를 삭제하는 것이 좋지만 유스 케이스에 따라 이것이 항상 가능하지는 않습니다. 문서가 있는지 확인하지 않고 삭제 문서를 발행 할 수 있습니다. 응답은 문서가 발견되었는지 여부를 나타냅니다. –