如何在 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);
我正在接受客户的意见,以使用 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);