我在弹性搜索中进行分组操作时遇到问题。
实际上,我的文档中有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 :(得分: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 aggregation这样的日期条款。 如果索引映射看起来像这样
{
"properties": {
"type": {
"type": "keyword"
},
"year": {
"type": "long"
}
}
}
您将获得每年每种错误类型的项目数 您也可以在嵌套聚合中执行其他类型的聚合 注意:术语聚合是近似的,因此如果您没有获得准确的值,请不要感到惊讶。