使用特殊字符在 Elasticsearch 中搜索

13

我无法在Elasticsearch中搜索以特殊字符结尾/开头的字符,例如"123456!"。

{
 "query": {
    "query_string": {
        "default_field": "password",
        "query": "123456!"
    }
 }
}

我的映射是

{
  "mappings": {
    "passwords": { 
      "properties": {
        "date":    { "type": "date"}, 
        "password":    { "type": "string","index": "not_analyzed"}, 

      }
    }
  }
}

我的搜索查询(或者映射)中含有特殊字符,导致出现错误,我该怎么做才能让这些特殊字符被当作搜索字符串的一部分来处理?

3个回答

19

由于您的密码字段是not_analyzed(很好!),请尝试通过用双引号括起来的123456!进行精确匹配:

{
 "query": {
    "query_string": {
        "default_field": "password",
        "query": "\"123456!\""
    }
 }
}

另一种方法是在您的query_string查询中设置keyword分析器(但一定要转义!,因为它是保留字符(用于NOT操作符))。
{
 "query": {
    "query_string": {
        "default_field": "password",
        "query": "123456\!",
        "analyzer": "keyword"
    }
 }
}

1
除了 Vals的答案外,还可以使用escape参数来转义query
{
 "query": {
    "query_string": {
        "default_field": "password",
        "query": "123456!",
        "analyzer": "keyword",
        "escape": true
    }
  }
}

0

如果您需要在查询本身中使用任何作为运算符的字符(而不是作为运算符),则应该用前导反斜杠对它们进行转义。

在使用JSON作为请求正文时,需要两个前置反斜线(\\);反斜杠是JSON字符串中保留转义字符。

{
  "query" : {
    "query_string" : {
      "query" : "kimchy\\!"
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接