在elasticsearch中搜索特殊字符

时间:2016-06-08 12:50:19

标签: elasticsearch

我无法在字符结尾/以特殊字符开头的Elasticsearch中进行搜索。喜欢" 123456!"

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

我的映射是

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

      }
    }
  }
}

它给了我错误,我可以在搜索查询(或映射)中做什么,以便将特殊字符视为搜索字符串的一部分?

2 个答案:

答案 0 :(得分:10)

由于您的password字段为not_analyzed(好!),请尝试使用双引号括起123456!进行完全匹配:

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

另一种方法是在keyword查询中设置query_string分析器(但请确保转义!,因为它是reserved character(对于NOT运营商)

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

答案 1 :(得分:0)

除了 Vals 答案,还可以使用 query 参数转义 escape

{
 "query": {
    "query_string": {
        "default_field": "password",
        "query": "123456!",
        "analyzer": "keyword",
        "escape": true
    }
  }
}