我可以将可选参数传递给我的es查询。如果未传递任何参数,则es-query应该只返回不考虑参数过滤器的所有内容。
我到目前为止所得到的:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
}
}
}
}
source_name
字段应该是可选的,这意味着如果我将发布者作为参数传递,那么它应该返回它找到的所有内容,如果没有传递任何发布者参数,则它应该忽略source_name
并仅返回所有内容。我该如何实现?
最佳答案
flex 搜索DSL是声明性语言,因此无法使用其他逻辑(控制流)。创建查询本身时,不应添加子句(如果输入为空)。
或者,您可以使用minimum_should_match。在这两种情况下,您都需要更改用于生成 flex 搜索查询的语言
查询:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
},
"minumum_should_match":1 --> 0 if input is empty
}
}
}
关于elasticsearch - Elasticsearch查询,它返回所有内容或找到的匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60688369/