在elasticsearch查询中转义特殊字符

时间:2016-10-16 11:24:40

标签: elasticsearch kibana sense elasticsearch-py

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

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

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

  1. 一如既往地错过
  2. 为。 GUI
  3. 好像 等等。任何人都可以建议如何按照我的期望执行以前的查询?
  4. 我正在使用

    • Elasticsearch 2.4.1
    • Ubuntu 14.04
    • Kibana 4.6.1

1 个答案:

答案 0 :(得分:0)

您收到错误,因为无需转义'@'字符。
"query": "@as" 应该有用 您也应检查映射,如果您的字段未标记为not_analyzed(或者没有keyword分析器),您将看不到任何搜索结果 - 标准分析器会删除“@”等字符索引文档时。
UPDATE
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"
    }
  }
}