如何在 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调用粘在一起,然后在最后执行搜索?

如何在 NEST 中附加两个搜索描述符

您可以按 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);