【问题标题】:Failed to parse query using Elastic Search API使用 Elastic Search API 解析查询失败
【发布时间】:2018-01-30 15:21:16
【问题描述】:

我正在使用 POST /_search API 在弹性搜索 5.6.0 中搜索数据。

当我尝试搜索查询 Android 8.0 (Oreo) 搜索 API 成功,但是当我尝试 Android 8.0 (Oreo 弹性搜索失败并出现错误 Failed to解析查询 [Android 8.0 (Oreo]
请看下面的错误:

{
  "shard":0,
  "index":"my_index",
  "node":"-Dzw5527SZGf7U0Ebut0PQ",
  "reason":{
    "type":"query_shard_exception",
    "reason":"Failed to parse query [Android 8.0 (Oreo]",
    "index_uuid":"wo7ihAX8Syy15MSDrS-Wsw",
    "index":"my_index",
    "caused_by":{
      "type":"parse_exception",
      "reason":"Cannot parse 'Android 8.0 (Oreo': Encountered \"<EOF>\" at line 1, column 17.\r\nWas expecting one of:\r\n    <AND> ...\r\n    <OR> ...\r\n    <NOT> ...\r\n    \"+\" ...\r\n    \"-\" ...\r\n    <BAREOPER> ...\r\n    \"(\" ...\r\n    \")\" ...\r\n    \"*\" ...\r\n    \"^\" ...\r\n    <QUOTED> ...\r\n    <TERM> ...\r\n    <FUZZY_SLOP> ...\r\n    <PREFIXTERM> ...\r\n    <WILDTERM> ...\r\n    <REGEXPTERM> ...\r\n    \"[\" ...\r\n    \"{\" ...\r\n    <NUMBER> ...\r\n    ",
      "caused_by":{
        "type":"parse_exception",
        "reason":"Encountered \"<EOF>\" at line 1, column 17.\r\nWas expecting one of:\r\n    <AND> ...\r\n    <OR> ...\r\n    <NOT> ...\r\n    \"+\" ...\r\n    \"-\" ...\r\n    <BAREOPER> ...\r\n    \"(\" ...\r\n    \")\" ...\r\n    \"*\" ...\r\n    \"^\" ...\r\n    <QUOTED> ...\r\n    <TERM> ...\r\n    <FUZZY_SLOP> ...\r\n    <PREFIXTERM> ...\r\n    <WILDTERM> ...\r\n    <REGEXPTERM> ...\r\n    \"[\" ...\r\n    \"{\" ...\r\n    <NUMBER> ...\r\n    "
      }
    }
  }
}

下面的查询对我有用:

{
  "query":{
    "bool":{
      "must":[
        {
          "query_string":{
            "query":"Android 8.0 (Oreo)",
            "default_operator":"AND"
          }
        }
      ]
    }
  }
}

下面的查询抛出异常:

{
  "query":{
    "bool":{
      "must":[
        {
          "query_string":{
            "query":"Android 8.0 (Oreo",
            "default_operator":"AND"
          }
        }
      ]
    }
  }
}

您能帮我解决这个问题吗?为什么我在查询中错过了 ) 时会收到错误消息?

【问题讨论】:

    标签: elasticsearch elasticsearch-5


    【解决方案1】:

    括号是query string syntax中的reserved character,所以需要这样转义

    {
      "query":{
        "bool":{
          "must":[
            {
              "query_string":{
                "query":"Android 8.0 \\(Oreo",
                "default_operator":"AND"
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 嗨 Val,我也试过了。如果我尝试使用 \ 对其进行转义,它会在 [Source: org.elasticsearch.transport. netty4.ByteBufStreamInput@59ed12ad; line: 7, column: 36]" } 另外,我想知道, ( ) 是如何工作的,而 ( 不是?
    • 我不好再试一次,你也需要转义反斜杠。
    • 你能告诉我,为什么 ( ) 对我有用,即使没有转义
    • () 工作但没有像您预期的那样,括号中简单地包装了 Oreo 令牌但在任何情况下它们都不匹配
    • 非常感谢,瓦尔。
    【解决方案2】:

    我也遇到了同样的问题。 我在邮递员中传递的字符串格式错误。 请检查格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多