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