C# 如何在嵌套中附加两个SearchDescriptor
我从客户机获取输入,使用NEST构建elasticsearch查询。我从基础开始,如下所示: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
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的内容。