2017-03-01 14 views
1

내가 가지고이 같은 쿼리검색 집계 둥지 통에서 검색되는 문서에 액세스하는 방법

var result = clientConnection.Search<dynamic>(s => s 
    .Index(indexname) 
    .Type(typename) 
.Aggregations(a => a 
    .DateRange(fieldvalue, d => d 
     .Field(fieldname) 

     .Ranges(
      r => r.To("2016-03-30T19:40:50+00:00"), 
      r => r.From("2016-03-15T19:40:50+00:00") 
     ) 
    ) 
) 
); 

      var agg = result.Aggs.DateRange("L2"); 

그러나 이것은 나에게이

nest bucket

이 추천 둥지 버킷을 제공 저에게 문서 수만 제공합니다. 그러나 나는 문서 안의 값들을 볼 필요가있다. 문서의 값을 어떻게 검색합니까? Nest.BucketItem을 사용했지만 검색 할 수 없습니다.

또한 2 개의 버킷이 있음을 알 수 있습니다. 왜 안돼? 제발 제안하십시오

답변

0

당신이 실제 문서를 따라 간다면, 문서를 얻기위한 쿼리는 아마도 집계가 아니라 필요한 것 일 것입니다. 하나의 요청으로 Multi Search API을 사용하여 여러 개의 쿼리를 실행할 수 있습니다. NEST 2.x 이상인 경우

var indexname = "index-name"; 
var typename = "type-name"; 
var fieldname = "field-name"; 

var result = client.MultiSearch(ms => ms   
    .Index(indexname) 
    .Type(typename) 
    .Search<dynamic>("search1", s => s 
     .Query(q => +q 
      .DateRange(r => r 
       .Field(fieldname) 
       .LessThan("2016-03-30T19:40:50+00:00") 
      ) 
     ) 
    ) 
    .Search<dynamic>("search2", s => s 
     .Query(q => +q 
      .DateRange(r => r 
       .Field(fieldname) 
       .GreaterThan("2016-03-15T19:40:50+00:00") 
      ) 
     ) 
    ) 
); 

var search1Documents = result.GetResponse<dynamic>("search1").Documents; 
var search2Documents = result.GetResponse<dynamic>("search2").Documents; 

이렇게하면 각 쿼리와 일치하는 처음 10 개의 문서가 반환됩니다. 검색 할 때마다 .From().Size()을 사용하여 결과 매김을 지정할 수 있습니다.

편집이 : NEST 1.x에서와

, 다중 검색 요청이 보이는 같은

var indexname = "index-name"; 
var typename = "type-name"; 
var fieldname = "field-name"; 

var result = client.MultiSearch(ms => ms 
    .FixedPath(indexname, typename) 
    .Search<dynamic>("search1", s => s 
     .Query(q => q 
      .Filtered(fq => fq 
       .Filter(fqf => fqf 
        .Range(r => r 
         .OnField(fieldname) 
         .Lower("2016-03-30T19:40:50+00:00") 
        ) 
       ) 
      ) 
     ) 
    ) 
    .Search<dynamic>("search2", s => s 
     .Query(q => q 
      .Filtered(fq => fq 
       .Filter(fqf => fqf 
        .Range(r => r 
         .OnField(fieldname) 
         .Greater("2016-03-15T19:40:50+00:00") 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

var search1Documents = result.GetResponse<dynamic>("search1").Documents; 
var search2Documents = result.GetResponse<dynamic>("search2").Documents; 

당신은하지만, 내가 Elasticsearch의 최신 5.x의 버전으로 업그레이드하는 것이 좋습니다 수 있다면 NEST는 all Elasticsearch 1.x versions are now end of line for support since 16th January 2017입니다. 최소한, Elasticsearch 1.4와 호환되어야하는 upgrading NEST to the latest 1.x version을 권하고 싶습니다.

+0

안녕하세요,이 줄에 쿼리를 쓰는 동안 오류가 발생합니다. var result = client.MultiSearch (ms => ms .Index (indexname) .Type (typename) ........ Nest.MultisearchDescription에 Index 정의가 없습니다. – Nilanjana

+0

NEST의 nuget 패키지 버전은 무엇입니까? –

+0

안녕하세요, 둥지 버전 1.4를 사용하고 있습니다. – Nilanjana