在 DSL 语法中嵌套多个术语
Nest multiple terms in DSL syntax
我正在尝试将以下查询转换为 NEST DSL 语法:
{
"aggs": {
"color": {
"terms": {
"field": "Color"
}
},
"weight": {
"terms": {
"field": "Weight"
}
}
}
}
每个术语都来自包含 name 和 fieldId 的列表。到目前为止,我已经设法做到了:
var request2 = _client.Search<T>(s => s
.Aggregations(aggs =>
aggs.Terms("Weight", x => x.Field("Weight")).Terms("Color", x => x.Field("Weight"))));
按预期工作,但是我需要能够动态提供参数 Weight
和 Color
,因为可以使用不同的参数集调用该方法。有没有办法使用类似的东西:
aggs.Terms(x => x.field( myList.foreach(y.value))));
我猜这会更好地使用对象初始化语法,但我宁愿让它在 dsl 中工作。
像下面这样的东西会起作用
var client = new ElasticClient();
var fields = new List<string>
{
"color",
"weight",
"foo",
"bar"
};
var response = client.Search<object>(s => s
.Aggregations(aggs =>
{
foreach (var field in fields)
{
aggs.Terms(field, t => t.Field(field));
}
return aggs;
})
);
生成以下请求
{
"aggs": {
"color": {
"terms": {
"field": "color"
}
},
"weight": {
"terms": {
"field": "weight"
}
},
"foo": {
"terms": {
"field": "foo"
}
},
"bar": {
"terms": {
"field": "bar"
}
}
}
}
我正在尝试将以下查询转换为 NEST DSL 语法:
{
"aggs": {
"color": {
"terms": {
"field": "Color"
}
},
"weight": {
"terms": {
"field": "Weight"
}
}
}
}
每个术语都来自包含 name 和 fieldId 的列表。到目前为止,我已经设法做到了:
var request2 = _client.Search<T>(s => s
.Aggregations(aggs =>
aggs.Terms("Weight", x => x.Field("Weight")).Terms("Color", x => x.Field("Weight"))));
按预期工作,但是我需要能够动态提供参数 Weight
和 Color
,因为可以使用不同的参数集调用该方法。有没有办法使用类似的东西:
aggs.Terms(x => x.field( myList.foreach(y.value))));
我猜这会更好地使用对象初始化语法,但我宁愿让它在 dsl 中工作。
像下面这样的东西会起作用
var client = new ElasticClient();
var fields = new List<string>
{
"color",
"weight",
"foo",
"bar"
};
var response = client.Search<object>(s => s
.Aggregations(aggs =>
{
foreach (var field in fields)
{
aggs.Terms(field, t => t.Field(field));
}
return aggs;
})
);
生成以下请求
{
"aggs": {
"color": {
"terms": {
"field": "color"
}
},
"weight": {
"terms": {
"field": "weight"
}
},
"foo": {
"terms": {
"field": "foo"
}
},
"bar": {
"terms": {
"field": "bar"
}
}
}
}