如何在 NEST 中附加两个 SearchDescriptors

How to append two SearchDescriptors in NEST

我正在接受客户的意见,以使用 NEST 构建弹性搜索查询。我从基础开始,像这样:

var search = esClient.Search<MyData>(s => s
    .From(pageNum * pageSize)
    .Take(pageSize)
    .QueryRaw(@"{""match_all"": {} }")

然后我解析请求并查看是否传入了一个可选的排序参数。如果是,我创建一个新的 SearchDescriptor<MyData>() 来执行请求的排序,我想将它添加到我的原始文件中search 个标准。显然 .Search() 实际上会执行一个 HTTP 调用,所以它不可能像今天这样发生,但是我如何将一系列 SearchDescriptor 调用粘在一起,然后在最后执行搜索?

您可以按以下方式逐步构建 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);