是否需要在Elasticsearch查询中转义保留字符?

时间:2016-04-07 05:34:55

标签: elasticsearch escaping query-string

我可能无法理解这一点,但在使用查询字符串查询搜索我的索引时,它指出需要转义保留字符或特殊字符。

https://www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl-query-string-query.html#_reserved_characters

  

保留字符为:+ - =&& || > < ! (){} [] ^“〜*?:\ /

无法正确转义这些特殊字符可能会导致语法错误,导致查询无法运行。“

目前我的索引没有对特殊字符进行标记,因为我只使用标准分析器,但我确实对所有字符串字段进行了分析和分析。

所以,如果我将这些字符串编入索引:

quick fox
brown fox

当我运行查询时:

{
    "query_string" : {
        "query" : "(quick OR brown) AND fox",
    }
}

正确的结果回来了。但是基于保留字符文档,是否需要在查询字符串查询中转义带括号“(”和“)”的查询?我有点困惑什么时候逃避保留字符和什么时候不在查询中?

是否需要?:

{
    "query_string" : {
        "query" : "\(quick OR brown\) AND fox",
    }
}

我知道括号用于分组,所以不要逃避它们是有意义的。但是在Elasticsearch的查询中总是需要转义哪些保留字符?只有保留字符是运算符?

1 个答案:

答案 0 :(得分:2)

如果保留字符不属于查询语法,则只需对其进行转义。

所以在(quick OR brown) AND fox你不能逃避任何事情。

但是,例如,如果您的字段包含您要搜索的保留字符,例如您的字段包含Hello!!是一个等同于NOT的保留字符,您想要搜索Hello!,那么您的查询必须像这样

`Hello\! AND blabla`
      ^^
      ||
escaped reserved char