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

Do reserved characters need to be escaped in an Elasticsearch query?

我可能没有正确理解这一点,但是当使用查询字符串查询来搜索我的索引时,它指出需要转义保留字符或特殊字符。

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

The reserved characters are: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /

未能正确转义这些特殊字符可能会导致语法错误,从而阻止您的查询 运行ning。"

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

因此,如果我将这些字符串编入索引:

quick fox
brown fox

当我运行一个查询:

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

返回正确的结果。但是根据保留字符文档,是否需要在查询字符串查询中转义带有括号“(”和“)”的查询?我对何时转义保留字符以及何时不在查询中感到有点困惑?

有必要吗?:

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

我知道括号是用来分组的,所以不转义它们是有意义的。但是在Elasticsearch的查询中,哪些保留字符总是需要转义的呢?仅当保留字符为运算符时?

仅当保留字符不是查询语法的一部分时才需要对其进行转义。

所以在 (quick OR brown) AND fox 中你不会逃避任何东西。

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

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