2

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

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

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

  1. 一如既往的怀念
  2. 作为。图形用户界面
  3. 好像等等。任何人都可以建议我如何实现之前的查询可以按照我的期望执行?

我在用

  • 弹性搜索 2.4.1
  • Ubuntu 14.04
  • Kibana 4.6.1
4

1 回答 1

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"
    }
  }
}
于 2016-10-16T15:02:22.703 回答