最近开始使用nest api进行ElasticSearch,在以下查询中遇到问题,数据.e将使用httpget中客户端的输入动态填充,例如:user发送eventa、eventb、eventc,然后我们将添加should部分:
GET events/_search
{
"_source": false,
"query": {
"bool": {
"must": [
{"range": {
"timestamp": {
"gte": 1604684158527,
"lte": 1604684958731
}
}},
{"nested": {
"path": "data",
"query": {
"bool": {
"should": [
{"match": {
"data.e": "eventA"
}},
{"match": {
"data.e": "eventB"
}},
{"match": {
"data.e": "eventC"
}},
]
}
},
"inner_hits": {}
}}
]
}
}
}
以下是我到目前为止的想法:
var graphDataSearch = _esClient.Search<Events>(s => s
.Source(src => src
.Includes(i => i
.Field("timestamp")
)
)
.Query(q => q
.Bool(b => b
.Must(m => m
.Range(r => r
.Field("timestamp")
.GreaterThanOrEquals(startTime)
.LessThanOrEquals(stopTime)
),
m => m
.Nested(n => n
.Path("data")
.Query(q => q
.Bool(bo => bo
.Should(
// what to add here?
)
)
)
)
)
));
有人能帮我建房子吗 should
根据用户发送的输入动态地进行部分?
谢谢。
1条答案
按热度按时间au9on6nz1#
您可以替换上面代码段中的嵌套查询,如下所示
我们现在要做的是返回一个
QueryContainer
将传递给嵌套查询的同样可以通过添加这个内联而不使用单独的方法来实现。你可以选择你喜欢的路线。然而,一般来说,拥有一个自己的方法可以增加可读性并保持事物的整洁。
你可以阅读更多关于
Match
此处使用编辑:
既然您想在这个函数中动态添加匹配查询,下面是一种方法。
现在,从上述方法的内部调用此方法,如下所示