我在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)
                    ))
           );

请尽快解决此问题。谢谢。

最佳答案

在这里,我将尽力提供帮助。仅 flex 项和子聚合中没有分组这样的东西。如果要按年份统计错误类型,可以这样:

  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"
            }
         }
  }

您将获得每年每种错误类型的项目数
您也可以在嵌套聚合中执行其他类型的聚合
注意:术语聚合是近似值,因此,如果您没有获得确切的值,请不要感到惊讶。

10-06 05:07
查看更多