ES|QL 语法参考

编辑

基本语法

编辑

一个 ES|QL 查询由一个源命令开始,后跟一系列可选的处理命令,使用管道字符分隔:|。例如

source-command
| processing-command1
| processing-command2

查询的结果是最终处理命令产生的表。

有关所有支持的命令、函数和运算符的概述,请参阅命令函数和运算符

为了提高可读性,本文档将每个处理命令放在新的一行。但是,你可以将 ES|QL 查询写成单行。以下查询与之前的查询相同

source-command | processing-command1 | processing-command2

标识符

编辑

如果标识符不符合以下条件,则需要使用反引号 (`) 引起来:

  • 不以字母、_@ 开头
  • 任何其他字符不是字母、数字或 _

例如

FROM index
| KEEP `1.field`

当引用本身使用带引号的标识符的函数别名时,带引号的标识符的反引号需要用另一个反引号转义。例如

FROM index
| STATS COUNT(`1.field`)
| EVAL my_count = `COUNT(``1.field``)`

字面量

编辑

ES|QL 目前支持数字和字符串字面量。

字符串字面量
编辑

字符串字面量是由双引号 (") 分隔的 Unicode 字符序列。

// Filter by a string value
FROM index
| WHERE first_name == "Georgi"

如果字面字符串本身包含引号,则需要对其进行转义 (\\")。为方便起见,ES|QL 还支持三引号 (""") 分隔符

ROW name = """Indiana "Indy" Jones"""

特殊字符 CR、LF 和 TAB 可以使用通常的转义符提供:分别是 \r\n\t

数字字面量
编辑

数字字面量以十进制形式和科学计数法形式接受,使用指数标记符 (eE),可以以数字、小数点 . 或负号 - 开头

1969    -- integer notation
3.14    -- decimal notation
.1234   -- decimal notation starting with decimal point
4E5     -- scientific notation (with exponent marker)
1.2e-3  -- scientific notation with decimal point
-.1e2   -- scientific notation starting with the negative sign

整数数字字面量隐式转换为 integerlongdouble 类型,以最先可以容纳字面量的值为准。

浮点数字字面量隐式转换为 double 类型。

要获得不同类型的常量值,请使用数字转换函数之一。

注释

编辑

ES|QL 使用 C++ 样式的注释

  • 双斜杠 // 用于单行注释
  • /**/ 用于块注释
// Query the employees index
FROM employees
| WHERE height > 2
FROM /* Query the employees index */ employees
| WHERE height > 2
FROM employees
/* Query the
 * employees
 * index */
| WHERE height > 2

时间跨度字面量

编辑

可以使用时间跨度字面量表示日期时间间隔和时间跨度。时间跨度字面量是数字和时间单位的组合。支持的时间单位在时间跨度单位中列出。有关时间跨度用法的更多示例,请参见在 ES|QL 中使用时间跨度

时间跨度字面量对空格不敏感。以下表达式都是有效的

  • 1day
  • 1 day
  • 1 day