I have simple elastic request:
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;
})
However, compiler requires Nest.IPromise<Nest.INamedFiltersContainer>
I haven't found any constructor which could construct a promise of a given type. Is there any way to cast the NamedFiltersContainer into a prmosie ?
You can use the parameters passed to the delegates to compose the named filters
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;
})
)
)
);
yields
{
"aggs": {
"FacetedSearch": {
"filters": {
"filters": {
"foo": {
"terms": {
"foo": ["bar"]
}
},
"baz": {
"terms": {
"baz": ["quux"]
}
}
}
}
}
}
}