我可以将可选参数传递给我的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/

10-17 03:04