我正在从客户端获取输入以使用NEST构建弹性搜索查询。我从基础开始,如下:
var search = esClient.Search<MyData>(s => s
.From(pageNum * pageSize)
.Take(pageSize)
.QueryRaw(@"{""match_all"": {} }")
然后我解析出请求并查看是否传入了可选的排序参数。如果是,我创建一个新的SearchDescriptor<MyData>()
执行请求的排序,我想将它添加到我原来的{{ 1}}标准。显然search
实际上会执行HTTP调用,因此它不会像现在这样发生,但是如何将一系列.Search()
调用粘在一起,然后在最后执行搜索?
答案 0 :(得分:6)
您可以逐步构建SearchDescriptor
。我使用了聚合而不是facets(现在已经弃用了)但我希望你能得到这个想法。
var sd = new SearchDescriptor<MyData>();
sd = sd.QueryRaw(<raw query string>);
if (<should sort>)
{
string fieldToBeSortedOn; // input from user
bool sortInAscendingOrder; // input from user
if (sortInAscendingOrder)
{
sd = sd.Sort(f => f
.Ascending()
.OnField(fieldToBeSortedOn));
}
else
{
sd = sd.Sort(f => f
.Descending()
.OnField(fieldToBeSortedOn));
}
}
if (<should compute aggregations>)
{
sd = sd.Aggregations(a => a
.Terms(
"term_aggs",
t => t
.Field(<name of field to compute terms aggregation on>)));
}
var search = esClient.Search<MyData>(s => sd);