2017-04-20 2 views
1

elastcicSearch에서 그룹화 작업을 수행하는 데 문제가 있습니다.탄성 검색에서 그룹화

사실, 문서에는 3 개의 필드가 있습니다. 그 아래에 :

Id Type Year 

이제 예외 유형과 연도를 그룹화하고 "ResultCount"에 집계하려고합니다.

나는이 일을 시도했지만 작동하지 않습니다 :

.Aggregations(a => a 
      .ValueCount("ResultCount", c => c 
       .Field(p => p.Id) 
       .Field(p=> p.Year) 
      )) 
      .Aggregations(a => a 
       .Terms("Type", st => st 
        .Field(o => o.Type) 
        .Size(10))).Size(5) 
      .Aggregations(aa => aa 
        .Max("Year", m => m 
         .Field(o => o.Year) 
        )) 
      ); 

가능한 한 빨리이 문제에 대한 해결책을주십시오. 고맙습니다.

+0

예외로 무엇을 얻고 있습니까? – user3775217

+0

하나의 예외가 해결되었지만 실제로 출력이 없으며 해당 데이터를 표시하거나 데이터 데이터를 보는 방법에 대해 전혀 알지 못합니다. –

+0

값 개수 집계는 단일 필드에서 작동합니다. 당신이 필드의 합성에 의지 할 필요가있는 경우 용어 하위 집합을 사용하거나 스크립트를 사용하여 가치 계산을위한 복합 키를 만들 수 있습니다. –

답변

0

여기 제가 도와 드리겠습니다. 탄력성 만있는 용어와 하위 집단에 그룹 같은 것은 없습니다.

var response = db.Search<Error>(s => 
       s.Size(0) 
       .Aggregations(aggs1 => aggs1.Terms("level1", 
         l1 =>l1.Field(f => f.Type) 
           .Aggregations(aggs2 => aggs2.Terms("leve2", t=> t.Field(f=>f.Year)))))); 

      foreach (var l1 in response.Aggs.Terms("level1").Buckets) 
      { 
       foreach (var l2 in l1.Terms("leve2").Buckets) 
       { 
        Console.WriteLine("Type:{0}, Year:{1}, Count:{2}", l1.Key, l2.Key, l2.DocCount); 
       } 
      } 

을하지만 당신은 날짜에 대한 용어를하려면이 단지 분석 비 또는 키워드 필드를 제외하고 당신으로 작동합니다 것을 명심 : 당신은 연도 별 오류 유형의 수를 원하는 경우에 당신은과 같이 그것을 할 수 있습니다 date_histogram 집계와 같은 것을 사용할 수 있습니다. 하면 인덱스 매핑이

{ 
     "properties": { 
      "type": { 
       "type": "keyword" 
      }, 
      "year": { 
       "type": "long" 
      } 
     } 
    } 

처럼 보인다면 당신은 집계 다른 종류뿐만 아니라에서 중첩 집계 참고를 할 수 당신은 연간 오류 유형 당 항목 수를 얻을 것이다 : 용어 집계는 너무 근사 정확한 값을 얻지 못하면 놀라지 마십시오.

관련 문제