在弹性搜索查询中转义特殊字符

escape special character in elasticsearch query

我的问题很简单,我不能在搜索查询中使用@。最后,我发现我可以使用反斜杠对特殊字符进行转义。

GET index/_search
{
  "size": 20,
  "query": {
    "query_string": {
      "query": "\@as",
      "analyzer": "keyword"
    }
  }
}

但是当我尝试这样做时,出现了以下错误 Unrecognized character escape '@' (code 64)\n at。当我尝试不使用 @ 符号时,我得到了没有 @ 符号的结果,例如

  1. 一如既往的怀念
  2. 作为。界面
  3. 好像 等等。谁能建议我如何才能按照我的期望执行之前的查询?

我正在使用

您收到错误是因为不需要转义“@”字符。
"query": "@as" 应该可以。
您还应该检查您的映射,如果您的字段未标记为 not_analyzed(或没有 keyword 分析器),您将看不到任何搜索结果 - 标准分析器会删除像“@”这样的字符索引文档时。
更新
query_string 默认使用 _all 字段,因此您必须按照类似于此示例的方式配置此字段:

PUT index 
{
   "mappings":{
      "book":{
         "_all":{
            "type":"string",
            "index":"analyzed",
            "analyzer":"whitespace"
         },
         "properties":{
            "name":{
               "type":"string",
               "index":"not_analyzed"
            }
         }
      }
   }
}

PUT /index/book/1
{
"name" : "@foo bar"
}

GET index/_search
{
  "size": 20,
  "query": {
    "query_string": {
      "query": "@foo",
      "analyzer": "keyword"
    }
  }
}