如何在 NEST 中附加两个搜索描述符
本文关键字:两个 搜索 描述 NEST | 更新日期: 2023-09-27 17:55:59
我正在从客户端获取输入,以使用NEST构建弹性搜索查询。 我从基础知识开始,如下所示:
var search = esClient.Search<MyData>(s => s
.From(pageNum * pageSize)
.Take(pageSize)
.QueryRaw(@"{""match_all"": {} }")
然后,我解析出请求,并查看是否传入了可选的排序参数。 如果是,我创建一个执行该请求排序的新SearchDescriptor<MyData>()
,我想将其添加到我的原始search
条件中。 显然,.Search()
实际上会执行HTTP调用,因此它不会像今天这样发生,但是我如何将一系列SearchDescriptor
调用粘在一起,然后在最后执行搜索?
您可以按 under 的增量方式构建SearchDescriptor
。我使用了聚合而不是分面(现已弃用),但我希望你明白这个想法。
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);