ES|QL 限制
编辑ES|QL 限制
编辑结果集大小限制
编辑默认情况下,ES|QL 查询最多返回 1000 行。您可以使用 LIMIT
命令将行数增加到 10,000 行。无论 LIMIT
命令的值是多少,查询都不会返回超过 10,000 行。
此限制仅适用于查询检索到的行数。查询和聚合在完整的数据集上运行。
要克服此限制
- 通过修改查询以仅返回相关数据来减小结果集大小。使用
WHERE
选择较小的数据集。 - 将任何查询后处理转移到查询本身。您可以使用 ES|QL
STATS ... BY
命令在查询中聚合数据。
可以使用以下动态集群设置更改默认和最大限制
-
esql.query.result_truncation_default_size
-
esql.query.result_truncation_max_size
字段类型
编辑支持的类型
编辑ES|QL 当前支持以下 字段类型
-
别名
-
布尔值
-
日期
-
double
(float
、half_float
、scaled_float
表示为double
) -
IP 地址
-
keyword
系列,包括keyword
、constant_keyword
和wildcard
-
int
(short
和byte
表示为int
) -
长整型
-
空值
-
文本
-
[预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。
unsigned_long
-
版本
-
空间类型
-
geo_point
-
geo_shape
-
点
-
形状
-
不支持的类型
编辑ES|QL 尚未支持以下字段类型
-
TSDB 指标
-
计数器
-
位置
-
aggregate_metric_double
-
-
日期/时间
-
date_nanos
-
date_range
-
-
其他类型
-
二进制
-
自动补全
-
密集向量
-
double_range
-
扁平化
-
float_range
-
直方图
-
integer_range
-
ip_range
-
long_range
-
嵌套
-
rank_feature
-
rank_features
-
搜索时输入
-
查询具有不支持类型的列将返回错误。如果查询中未显式使用具有不支持类型的列,则它将返回 null
值,嵌套字段除外。嵌套字段根本不会返回。
支持类型的限制
编辑某些 字段类型 在所有上下文中都不受支持
-
在 SORT 处理命令中不支持空间类型。将其中一种类型的列指定为排序参数将导致错误
-
geo_point
-
geo_shape
-
cartesian_point
-
cartesian_shape
-
此外,当 查询多个索引 时,同一字段可能映射到多种类型。这些字段不能直接用于查询或在结果中返回,除非它们 显式转换为单一类型。
_source 可用性
编辑ES|QL 不支持 _source 字段 被 禁用 的配置。
[预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。 ES|QL 对 合成 _source
的支持目前处于实验阶段。
不支持全文搜索
编辑由于 ES|QL 处理 text
值的方式,全文搜索尚未得到支持。对 text
字段的查询类似于对 keyword
字段的查询:它们区分大小写,并且需要匹配整个字符串。
例如,在将类型为 text
的字段索引为值 Elasticsearch query language
后,以下 WHERE
子句不匹配,因为 LIKE
运算符区分大小写
| WHERE field LIKE "elasticsearch query language"
以下 WHERE
子句也不匹配,因为 LIKE
运算符尝试匹配整个字符串
| WHERE field LIKE "Elasticsearch"
作为解决方法,可以使用通配符和正则表达式。例如
| WHERE field RLIKE "[Ee]lasticsearch.*"
text
字段的行为类似于 keyword
字段
编辑虽然 ES|QL 支持 text
字段,但 ES|QL 不会像搜索 API 那样处理这些字段。ES|QL 查询不会查询或聚合 已分析的字符串。相反,ES|QL 查询将尝试获取 text
字段的 关键字系列类型 的子字段并查询/聚合该子字段。如果无法检索 keyword
子字段,ES|QL 将从文档的 _source
获取字符串。如果无法检索 _source
(例如,当使用合成源时),则返回 null
。
请注意,ES|QL 检索 keyword
子字段可能会产生意外的后果。对 text
字段的 ES|QL 查询区分大小写。此外,子字段可能已使用 规范化器 映射,这可以转换原始字符串。或者它可能已使用 ignore_above
映射,这可以截断字符串。ES|QL 查询不会应用任何这些映射操作,这可能导致误报或漏报。
为了避免这些问题,最佳实践是明确查询的字段,并查询 keyword
子字段而不是 text
字段。
不支持时间序列数据流
编辑ES|QL 不支持查询时间序列数据流 (TSDS)。
日期数学限制
编辑当最左侧的表达式为日期时间时,日期数学表达式效果很好,例如
now() + 1 year - 2hour + ...
但使用括号或将日期时间放在右侧并非总是受支持。例如,以下表达式失败
1year + 2hour + now() now() + (1year + 2hour)
日期数学不允许减去两个日期时间,例如
now() - 2023-10-26
Enrich 限制
编辑ES|QL ENRICH
命令仅支持类型为 match
的 enrich 策略。此外,ENRICH
仅支持对类型为 keyword
的列进行丰富。
Dissect 限制
编辑DISSECT
命令不支持引用键。
Grok 限制
编辑GROK
命令不支持配置 自定义模式 或 多个模式。GROK
命令不受 Grok 看门狗设置 的约束。
多值限制
编辑ES|QL 支持多值字段,但除非另有说明,否则将函数应用于多值字段时会返回 null
。通过使用其中一个 多值函数 将字段转换为单值来解决此限制。
时区支持
编辑ES|QL 仅支持 UTC 时区。
Kibana 限制
编辑- 当 Discover 处于 ES|QL 模式时,过滤数据的用户界面未启用。要过滤数据,请编写一个使用
WHERE
命令的查询。 - Discover 显示不超过 10,000 行。此限制仅适用于查询检索到的行数并在 Discover 中显示的行数。查询和聚合在完整的数据集上运行。
- Discover 显示不超过 50 列。如果查询返回超过 50 列,Discover 仅显示前 50 列。
- 来自 Discover 的 CSV 导出显示不超过 10,000 行。此限制仅适用于查询检索到的行数并在 Discover 中显示的行数。查询和聚合在完整的数据集上运行。
- 一次查询许多索引且没有任何过滤器可能会导致 kibana 中出现错误,类似于
[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888)
。ES|QL 的响应太长。使用DROP
或KEEP
限制返回的字段数量。