我有简单的弹性要求:
var request4 =
_client.Search<T>(s => s
.Aggregations(aggs =>
aggs.Filters("FacetedSearch",
f => f
.NamedFilters(g =>
{
var namedFilters = new NamedFiltersContainer();
foreach (var facet in _facets)
{
namedFilters.Add(facet.Key,
Query<T>.Terms(p => new Nest.TermsQuery
{Field = facet.Key, Terms =
new[] {facet.Value}}));
}
return namedFilters;
})
但是,编译器需要Nest.IPromise<Nest.INamedFiltersContainer>
,我还没有找到可以构造给定类型的Promise的构造函数。有什么方法可以将NamedFiltersContainer转换为prmosie吗?
答案 0 :(得分:0)
您可以使用传递给委托的参数来组成命名过滤器
var client = new ElasticClient();
var _facets = new Dictionary<string, string>
{
["foo"] = "bar",
["baz"] = "quux"
};
var request4 = client.Search<object>(s => s
.Aggregations(aggs =>
aggs.Filters("FacetedSearch", f => f
.NamedFilters(g =>
{
foreach (var facet in _facets)
{
g.Filter(facet.Key, Query<object>.Terms(p => p
.Field(facet.Key)
.Terms(new[] { facet.Value })
)
);
}
return g;
})
)
)
);
收益
{
"aggs": {
"FacetedSearch": {
"filters": {
"filters": {
"foo": {
"terms": {
"foo": ["bar"]
}
},
"baz": {
"terms": {
"baz": ["quux"]
}
}
}
}
}
}
}