【问题标题】:malformed query, expected "END_OBJECT" but found "FIELD_NAME"格式错误的查询,应为“END_OBJECT”,但找到了“FIELD_NAME”
【发布时间】:2021-04-22 09:03:53
【问题描述】:

您好,在 Kibana 控制台中运行术语查询时,我收到 parsing_exception

查询

GET /products/_search
{
  "query": {
    "terms": {
      "tags.keyword": [ "Soup", "Cake" ]
    },
    "range": {
      "in_stock": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

响应/异常

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parsing_exception",
        "reason" : "[terms] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line" : 6,
        "col" : 5
      }
    ],
    "type" : "parsing_exception",
    "reason" : "[terms] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
    "line" : 6,
    "col" : 5
  },
  "status" : 400
}

谁能告诉我为什么会出现这个异常以及如何解决它?

【问题讨论】:

    标签: elasticsearch exception kibana


    【解决方案1】:

    您需要使用boolean query 组合术语和范围查询。如下所示修改您的搜索查询 -

    {
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "tags.keyword": [
                  "Soup",
                  "Cake"
                ]
              }
            },
            {
              "range": {
                "in_stock": {
                  "gte": 10,
                  "lte": 20
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 这行得通,谢谢。但我仍然想知道为什么我提到的查询不起作用。
    • @Udhav Mohata 如果要组合多个查询,则必须使用复合查询,如布尔查询。您不能在单个查询子句中使用多个查询。
    • 另外,使用filter 而不是must,因为不涉及计分。
    • @Udhav Mohata 能否请您投票并接受答案,因为它可以帮助您解决问题:)
    猜你喜欢
    • 2020-02-26
    • 2018-01-30
    • 2018-02-10
    • 2018-04-25
    • 1970-01-01
    • 2022-10-25
    • 2022-01-14
    • 2017-12-01
    • 2020-08-30
    相关资源
    最近更新 更多