我已经有两个querydescriptor变量动态保存布尔查询构建,如:
QueryContainer should_container = new QueryContainer();
QueryContainer filter_container = new QueryContainer();
foreach (var parameter in should_parameters) {
should_container |= constructClause(parameter);
}
foreach (var parameter in filter_parameters) {
filter_container &= constructClause(parameter);
}
当我尝试合并这两个变量来构造查询时,如下所示:
var result = client.Search<ElasticSearchProject>(s=>s
.From(0)
.Size(10)
.Query(qr => qr
.Bool(b => b
.Should(should_container)
.Filter(filter_container)
)
)
);
调试返回的结果变量:
"query": {
"bool": {
"should" : [
"bool": {
"should": [
{...},
{...}
]
}
],
"filter": [
"bool": {
"must": [
{...},
{...}
]
}
]
这是正确的!但我想知道是否有办法避免使用这两个 should
子句,并获得以下输出:
"query": {
"bool": {
"should" : [
{...},
{...}
],
"filter": [
"bool": {
"must": [
{...},
{...}
]
}
]
这给了我完全相同的结果。如何使用nest编写它来获得上述查询?我正在使用elasticsearch 6.8.0
1条答案
按热度按时间eoxn13cs1#
所有布尔查询
should
,must
,filter
,must_not
条款接受params QueryContainer[]
对于每个子句,可以使用List<QueryContainer>
收集子句的查询,然后.ToArray()
名单如果在子句中有大量查询,这将比使用重载运算符组合许多查询更快。