形成带有额外引号的弹性搜索查询

Forming Elastic search query with extra quotation marks

我正在尝试通过 Elasticsearch 的查询字符串模仿 Kibana 的搜索查询。例如在 Kibana 我可以用引号这样搜索:

"ABC" AND "CDE"

当我尝试创建此查询字符串时,它抛出一个语法错误:

{
"query": {
"query_string": {
"fields": ["messages"]
"query": ""ABC" AND "CDE"" (syntax error occurs here)
}
}
}

我知道我可以在没有额外引号的情况下查询它,但我需要将用户的输入附加到将包含这些额外引号的查询字符串中。我怎样才能形成这个查询,以便它可以接受引号?

您可以转义查询字段中的引号

{
  "query": {
    "query_string": {
      "fields": ["messages"],
      "query": "\"ABC\" AND \"CDE\""
    }
  }
}

或将查询值用三引号引起来

{
  "query": {
    "query_string": {
      "fields": ["messages"],
      "query": """
        "ABC" AND "CDE"
      """
    }
  }
}

(您的示例还缺少字段和查询字段之间的逗号)

您应该能够转义引号:

GET index-2021.02.21/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "message": "\"ABC\""
          }
        }
      ]
    }
  }
}