gpt4 book ai didi

c# - ElasticSearch-使用对象初始化API构建多个聚集的.NET NEST API似乎创建了错误的请求

转载 作者:行者123 更新时间:2023-12-02 23:30:24 25 4
gpt4 key购买 nike

我正在动态构建 flex 搜索查询的组件,该查询包含潜在的多个聚合。

.Net 4.5.2巢2.3.1 Elasticsearch.Net 2.3.1

我可以通过重复以下结构成功添加多个聚合:

 var aggregations = new AggregationDictionary();
aggregations["yyy"] = new AggregationContainer {
Terms = new TermsAggregation("xxx")
{
Field = "afield"
}
};

然后将搜索中的Aggregrations属性设置为aggregations变量。一切都很好。

我可以成功创建一个嵌套的聚集,如下所示:
var aggregations=new NestedAggregation("Countries") {
Path = "MetaData.GeographicCoverage.Countries",
Aggregations =
new TermsAggregation("Country") {
Field = "MetaData.GeographicCoverage.Countries.Country"
}
};

再次将搜索中的Aggregrations属性设置为aggregations变量,一切都很好。

当我结合这两种方法来创建具有多个聚集(其中一个(或多个)嵌套)的查询时,就会出现问题。因此,上述嵌套示例生成的Json如下所示:
{
"size": 0,
"aggs": {
"Countries": {
"nested": {
"path": "MetaData.GeographicCoverage.Countries"
},
"aggs": {
"Country": {
"terms": {
"field": "MetaData.GeographicCoverage.Countries.Country"
}
}
}
}
}
}

现在,当我结合使用这些方法时,就像在第一个代码片段中一样,添加嵌套的聚集:
var aggregations = new AggregationDictionary();

var nested = new NestedAggregation("Countries") {
Path = "MetaData.GeographicCoverage.Countries",
Aggregations =
new TermsAggregation("Country") {
Field = "MetaData.GeographicCoverage.Countries.Country"
}
};

aggregations["Countries"] = new AggregationContainer {
Nested = nested
};

然后,所生成查询的Json会错过实际的“Country”聚集:
{
"size": 0,
"aggs": {
"Countries": {
"nested": {
"path": "MetaData.GeographicCoverage.Countries"
}
}
}
}

那么-这是一个错误还是我错误地使用了Nest类?如果我使用的类不正确,该如何修复代码?

谢谢你的帮助。

最佳答案

事实证明,解决该问题的方法是将NestedAggregration的显式类型转换添加到AggregationContainer,然后将其直接添加到AggregationsDictionary。

var aggregations = new AggregationDictionary();
var nested =
new NestedAggregation("Countries") {
Path = "MetaData.GeographicCoverage.Countries",
Aggregations =
new TermsAggregation("Country") {
Field = "MetaData.GeographicCoverage.Countries.Country"
}
};

aggregations["Countries"] = (AggregationContainer)nested;

关于c# - ElasticSearch-使用对象初始化API构建多个聚集的.NET NEST API似乎创建了错误的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com