elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 如何在嵌套中附加两个SearchDescriptor

C# 如何在嵌套中附加两个SearchDescriptor,c#,elasticsearch,nest,C#,elasticsearch,Nest,我从客户机获取输入,使用NEST构建elasticsearch查询。我从基础开始,如下所示: var search=esClient.search(s=>s .From(pageNum*pageSize) .Take(页面大小) .QueryRaw(@“{”匹配所有“:{}”) 然后,我解析出请求并查看是否传入了可选的排序参数。如果传入了,我将创建一个新的SearchDescriptor(),用于执行请求的排序,并希望将其添加到原始的search条件中。显然.search()实际上将执行一个H

我从客户机获取输入,使用NEST构建elasticsearch查询。我从基础开始,如下所示:

var search=esClient.search(s=>s
.From(pageNum*pageSize)
.Take(页面大小)
.QueryRaw(@“{”匹配所有“:{}”)


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

您可以像下面那样以增量方式构建
SearchDescriptor
。我使用了聚合而不是facet(现在不推荐使用)但我希望你能明白

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);
var sd=newsearchdescriptor();
sd=sd.QueryRaw();
如果()
{
string fieldToBeSortedOn;//来自用户的输入
bool sortInAscendingOrder;//来自用户的输入
if(排序顺序)
{
sd=sd.Sort(f=>f
.升序()
.OnField(fieldToBeSortedOn));
}
其他的
{
sd=sd.Sort(f=>f
.下降()
.OnField(fieldToBeSortedOn));
}
}
如果()
{
sd=sd.聚合(a=>a
.条款(
“术语”,
t=>t
.Field());
}
var search=esClient.search(s=>sd);

您能描述一下您希望纳入搜索的参数种类吗?ES和Nest允许您在调用中添加大量定制,需要更多关于您希望实现什么的信息。@DanielHoffmann Mitscherling好的,用户将传入一个查询字符串,让我们进入
QueryRaw
,但是也会(可选地)传入一个表示要排序的字段的单独字符串,以及一个表示排序顺序的单独字符串(asc/desc)。最后,传入一个facet类型和facet的内容。