有人知道如何使用nest进行多重聚合吗?我找到了很多示例,但很不幸,它们都无法正常工作。
这是我的代码:
Vehicles fields = new Vehicles();
//create a terms query
var query = new TermsQuery
{
IsVerbatim = true,
Field = "VehicleOwnerId",
Terms = new string[] { 25 },
};
var aggregations = new Dictionary<string, IAggregationContainer>
{
{ "years", new AggregationContainer
{
Terms = new TermsAggregation(nameof(fields.Year))
{
Field = new Field(nameof(fields.Year))
}
}
}
//,
//{ "makes", new AggregationContainer
// {
// Terms = new TermsAggregation("Make")
// {
// Field = new Field(nameof(fields.Make))
// }
// }
//}
};
//create the search request
var searchRequest = new SearchRequest
{
Query = query,
From = 0,
Size = 100,
Aggregations = aggregations
};
var result = client.SearchAsync<InventoryLiveView>(searchRequest).Result;
var years = result.Aggregations.Terms("years");
Dictionary<string, long> yearCounts = new Dictionary<string, long>();
foreach (var item in years.Buckets)
{
yearCounts.Add(item.Key, item.DocCount ?? 0);
}
如果我只是像这样执行代码,它就能正常工作。Years按预期返回聚合值。如果我尝试添加另一个字段(如上面注释掉的字段),它会失败并返回零条记录。 如何在一个查询中获取多个聚合值?我看到这方面的示例很多,但我尝试的所有示例似乎都不起作用,大多数都已过时(包括Nest文档中的一些示例)。 我还尝试了这种方法,它与文档非常接近。
//create the search request
var searchRequest = new SearchRequest
{
Query = query,
From = 0,
Size = 100,
//Aggregations = aggregations
Aggregations = new AggregationDictionary
{
{
"childAgg", new ChildrenAggregation("childAgg", typeof(Vehicles ))
{
Aggregations = new AggregationDictionary
{
{"years", new TermsAggregation(nameof(fields.VehicleYear))},
{"makes", new TermsAggregation(nameof(fields.VehicleMakeName))},
{"models", new TermsAggregation(nameof(fields.VehicleModelName))},
}
}
}
}
};
var result = client.SearchAsync<Vehicles>(searchRequest).Result;
这只会产生一个空引用异常。
new MaxAggregation("max_per_child", Field(p => p.ConfidenceFactor)) 应该改为 MaxAggregation("max_per_child", new Field("ConfidenceFactor")) 或者至少在我看来是这样的。
- user2033791Field = Field<Project>(p => p.State)
,但我无法让Field<T>
起作用。然而,Field(string)
却可以正常工作。我不记得确切的错误,但它只是无法识别它。谢谢您提供的信息 - 我可能做错了什么。 - user2033791Nest.Infer
静态导入:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/field-inference.html#nest-infer。 - Russ Cam