使用 NEST 我有一个看起来像这样的请求
var searchRequest = new SearchRequest<T>()
{
...
Aggregations = new TermsAggregation("field1")
{
Field = "field1",
Aggregations = new TermsAggregation("field2")
{
Field = "field2",
}
},
...
}
await _elasticClient.SearchAsync<T>(searchRequest)
我得到了我预期的结果,“field2”上的聚合为“field1”下的每个替代项
我想要其他聚合,所以我将术语聚合放在 AggregationDictionary 中。
var aggs = new AggregationDictionary();
aggs.Add("field1", new TermsAggregation("field1")
{
Field = "field1",
Aggregations = new TermsAggregation("field2")
{
Field = "field2",
}
})
...
var searchRequest = new SearchRequest<T>()
{
...
Aggregations = aggs,
...
}
...
await _elasticClient.SearchAsync<T>(searchRequest)
现在我在“field1”上得到聚合,但在“field2”上没有子聚合。
我错过了什么还是应该以这种方式工作?
编辑 1:为 AggregationDictionary.Add 添加了键,以便我的示例代码(希望)编译并包含我的 SearchAsync 调用
最佳答案
aggs.Add( new TermsAggregation("field1")
{
Field = "field1",
Aggregations = new TermsAggregation("field2")
{
Field = "field2",
}
})
此代码不会编译为
AggregationDictionary.Add()
method signature是public void Add(string key, AggregationContainer value)
以下
var client = new ElasticClient();
var aggs = new AggregationDictionary();
aggs.Add("field1", new TermsAggregation("field1")
{
Field = "field1",
Aggregations = new TermsAggregation("field2")
{
Field = "field2",
}
});
var request = new SearchRequest<object>
{
Aggregations =aggs
};
var searchResponse = client.Search<object>(request);
发出以下请求
{
"aggs": {
"field1": {
"aggs": {
"field2": {
"terms": {
"field": "field2"
}
}
},
"terms": {
"field": "field1"
}
}
}
}
看看documentation on Writing Aggregations .聚合可以通过
&&
在同一级别组合在一起将它们放在一起
关于c# - 带有附加 TermAggregation 的 TermAggregation 在 AggregationDictionary 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61227106/