2016-06-29 4 views
0

새로운 2.X NEST 클라이언트를 사용하고 있습니다. 그 부분은 잠재적 인 해답에 영향을 줄 수있는 많은 중요한 변경 사항이 있었기 때문에 중요합니다.2.X NEST 클라이언트로 검색 응답 요청 본문 받기

이전에는 Glimpse Elasticsearch 플러그인을 사용하여 NEST에서 생성 된 기본 쿼리를 확인했습니다. 그러나 플러그인이 2.X NEST와 더 이상 호환되지 않는 것으로 보입니다. 결과적으로 JSON 쿼리를 볼 수있는 해결 방법을 찾으려고합니다. 여기서 문제는 요청 본문에 접근하기 위해 이전에 접근했던 response.RequestInformation의 방법이 사라 졌다는 것입니다. ApiCall, CallDetailsDebugInformation의 조합으로 대체 된 것으로 보입니다. 여기서 문제는 ElasticClient에 전달하는 ConnectionSettings 인스턴스에 .DisableDirectStreaming()을 추가하지 않으면 요청 바이트 배열이 모두 null이라는 것입니다. 문제는 Ninject와 함께 의존성 삽입을 사용하여 모든 것을 처리한다는 것입니다. 따라서 컨트롤러 액션과 같은 것에서는 변경을하기 위해 ConnectionSettings 인스턴스에 액세스 할 수 없습니다. 나는 단지 .DisableDirectStreaming()을 전 세계적으로 추가 할 수 있다고 생각하지만, 그 잠재적 인 결과는 무엇인지 모르며, 이것에 대한 문서는 좌절감이 부족합니다.

여기에는 답변을위한 몇 가지 방법이 있습니다. 그 중 어떤 것도 받아 들일 것입니다. 첫째, 누군가가 2.X로 작동하는 Glimpse 플러그인을 얻을 수 있다면, 나는 당신이 무엇을했는지 알고 싶다. 그러나 근본적인 API가 극적으로 바뀌 었다는 사실에 기반하여, 내 생각에 누군가 플러그 - 인이 2.X로 갈 때까지 또는 플러그인이 자체 버전으로 출시 될 때까지 플러그인이 근본적으로 손상된다는 가정이 있습니다. 미래).

두 번째로 직접 스트리밍을 사용 중지하지 않고 요청 본문에 도달 할 수있는 방법이 있다면 간단히 놓쳤습니다. 거기에 안내해 주시면 감사하겠습니다.

사람이 내 Ninject에 설정에 영향을 주거나, 삐 소리 주시기 바랍니다. 마지막으로

을 전 세계적으로 적용하지 않고, 컨트롤러 액션 수준에서 직접 스트리밍을 해제 할 수있는 방법에 대한 아이디어가있는 경우

셋째, 그것은 좋은 것입니다 Elastic 팀의 직원이 직접 스트리밍을 사용하지 못하게하는 것과 그로 인해 발생할 수있는 잠재적 인 문제를 알려줄 수 있다면 전 세계적으로 적용할지 여부를 결정할 수 있습니다.

답변

2

.DisableDirectStreaming()이 true로 설정된 경우 요청 바이트 및 응답 바이트는 각각 response.RequestBodyInBytesresponse.ResponseBodyInBytes을 통해 응답에서 사용할 수 있도록 메모리 스트림에 버퍼링됩니다.

기본적으로 요청 유형이 false가되도록 false로 설정됩니다. SearchDescriptor<T>, SearchRequest<T> 등은 http 요청의 요청 스트림에 직접 직렬화되며 이와 유사하게 응답 유형은 응답 스트림에서 직렬화가 해제됩니다. 이를 실제로 설정하는 오버 헤드는 응답의 수명 동안 요청 및 응답 바이트를 메모리에 유지하는 것입니다 (그리고 GC가 시작되는).

연결 설정을 사용하면 응용 프로그램의 수명 동안 하나의 인스턴스를 갖는 것이 가장 좋습니다. 직렬화 설정은 연결 설정 및 필드 및 속성 식에 대한 캐시마다 캐시됩니다. 현재 요청 및 응답 바이트를 요청 단위 (즉, 애드혹 인트로 스펙)로 유지할 방법은 없습니다. 그러나 이것이 유용한 추가 기능이라고 생각합니다. 내가 그것에 대한 문제를 추가합니다 :)

개인적으로 엿볼 통합에 익숙하지 않아요.하지만 변경 사항 중 일부로 인해 NEST 2.x에서 업데이트해야 할 것으로 예상됩니다. 간단히 살펴봤을 때, 변경 사항은 매우 간단하게 보입니다.이 같은 모습은 .DisableDirectStreaming()을 true로 설정하지 않고도 요청 스트림에 기록되기 전에 요청 바이트 만 잡을 필요없이 수행 할 수 있습니다.

+0

NEST 5.x에서 요청별로 직접 스트리밍을 사용하지 못하도록 설정할 수 있습니다. 2.x로 다시 포트 할 수 있는지 확인합니다. –

+0

이 정보를 찾는 사용자는이 정보를 찾을 수 있습니다 여기 - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/debug-information.html - 'SearchDescriptor'는 'RequestConfiguration'을 허용합니다. –