2017-04-20 42 views
1

我在使用elastcicSearch进行分组操作时遇到问题。在弹性搜索中分组

其实我在文档里有3个字段。就像下面那样:

Id Type Year 

现在我想对ExceptionType和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" 
      } 
     } 
    } 

您将获得每人每年错误类型的项目数 你可以做其他类型的聚合,以及在嵌套聚集 注:术语聚集近似如此如果你没有得到确切的数值,请不要感到惊讶。