2015-01-05 1 views
0

NEST 쿼리 결과를 콘솔 출력으로 반환하고 싶습니다.NEST 쿼리 결과를 표시하는 방법은 무엇입니까?

내 질문은 : 내가 얻고 것은 객체가이 문서와 함께,

private static void PerformTermQuery(string query) 
{ 
    var result = 
     client.Search<Post>(s => s 
     .Query(p => p.Term(q => q.PostText, query))); 
} 

입니다. 콘솔에 json (전체 또는 부분)으로 문서를 보여주기 위해 "압축을 풀"하는 방법은 무엇입니까?

답변

1

당신이 NEST의 버전 1.3.1을 사용하는 가정, 당신은 할 수 있습니다

  • _source
  • 이 /가 포함 얻을 SearchDescriptorSearchSourceDescriptor를 사용하여 _source 속성을 result.RequestInformation.ResponseRaw.Utf8String()
  • 구문 분석 JSON을 사용하여 원시 JSON 응답을 제외 할 수 var result = client.Search<Post>(s => s .Query(p => p.Term(q => q.PostText, query)).Source(...));
+0

result.RequestInformation.ResponseRaw.Utf8String()을 사용할 수 없습니다. 왜? –

+0

[이 방법은 내부 용] (https://github.com/elasticsearch/elasticsearch-net/blob/develop/src/Nest/Extensions/Extensions.cs). 나는 이것을 점검 할 때 NEST 유닛 테스트 컨텍스트에 있었다. 내 잘못. 'Encoding.UTF8.GetString (...)'이 당신을 위해 일할 것입니다. – Rob

0

NE ST/Elasticsearch 5.x, result.RequestInformation은 더 이상 제공되지 않습니다. 대신, 요청에 직접 스트리밍을 사용하지 않도록 먼저 에 의해 원시 요청 및 응답 데이터에 액세스 할 수 있습니다 : 당신이 비활성화 직접 스트리밍을 한 후이 속성 보면

var results = elasticClient.Search<MyObject>(s => s 
    .Index("myindex") 
    .Query(q => q 
     ... 
    ) 
    .RequestConfiguration(rc => rc 
     .DisableDirectStreaming() 
    ) 
); 

, 당신은 (results.ApiCall.ResponseBodyInBytes에 액세스 할 수 있습니다 직접 스트리밍을 사용하지 않으면 null이됩니다.)

string rawResponse = Encoding.UTF8.GetString(results.ApiCall.ResponseBodyInBytes); 

이것은 성능에 영향을 줄 수 있으므로 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 또한 모든 쿼리에서 사용해야하는 경우 연결/클라이언트 수준에서 직접 스트리밍을 사용하지 않도록 설정할 수도 있습니다. Take a look at the documentation for more information.