如何在NEST中附加两个SearchDescriptors

时间:2015-06-12 19:01:55

标签: c# elasticsearch nest

我正在从客户端获取输入以使用NEST构建弹性搜索查询。我从基础开始,如下:

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

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

1 个答案:

答案 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);