【问题标题】:Combine must and should结合必须和应该
【发布时间】:2018-01-19 11:05:36
【问题描述】:

我在使用 elasticsearch 查询时遇到了一些问题。 (我使用弹性搜索 5)。我想结合 must bool 查询和 should 以创建符合此条件的查询:

Get users which match (city = x) AND (school = y) AND (age = 12) AND (team = a OR b)

我尝试了很多查询,但仍然遇到查询格式错误的异常。

{
  "query": {
    "bool": {
      "must" : [
        {
          "match": {
            "city": "x"
          }
        },
        {
          "match" : {
            "school" : "y"
        }
        },
        {
          "match" : {
            "age" : 12
        },
          "bool": {
            "should": [
              {"term": {"team": "A"}},
              {"term": {"team": "B"}}
            ]
          }
        }
      ]
    }
  }
}

我希望有人可以帮助我:D

感谢您的帮助

【问题讨论】:

  • 好的。为什么您的查询不起作用?
  • 当您复制粘贴查询时,您可能想遗漏一些内容,但您忘记为bool 语句添加花括号。或者这是您在查询中的错误。
  • 我收到了这个错误:{ "error": { "root_cause": [ { "type": "parsing_exception", "reason": "[match] 格式错误的查询,预期 [END_OBJECT] 但发现[FIELD_NAME]", "line": 19, "col": 11 } ], "type": "parsing_exception", "reason": "[match] 查询格式错误,应为 [END_OBJECT] 但找到 [FIELD_NAME]", "行”:19,“列”:11 },“状态”:400 }
  • 如果我把我的 bool / should 放在花括号内它会返回一个“Bad String”错误(我使用 Kibana 来测试我的查询)

标签: elasticsearch elasticsearch-5


【解决方案1】:

这对我有用:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "city": "x"
          }
        },
        {
          "match": {
            "school": "y"
          }
        },
        {
          "match": {
            "age": 12
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "team": "A"
                }
              },
              {
                "term": {
                  "team": "B"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

【讨论】:

  • 见鬼!我只是在您发送之前找到解决方案!非常感谢:) 你拯救了我的一天:p
  • 感谢您的跟进和确认。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2018-04-06
  • 1970-01-01
  • 2020-07-31
  • 2017-10-30
相关资源
最近更新 更多