ES|QL 限制

编辑

结果集大小限制

编辑

默认情况下,ES|QL 查询最多返回 1000 行。您可以使用 LIMIT 命令将行数增加到 10,000 行。无论 LIMIT 命令的值如何,查询都不会返回超过 10,000 行。

此限制仅适用于查询检索的行数。查询和聚合在完整的数据集上运行。

要克服此限制

  • 通过修改查询以仅返回相关数据来减少结果集大小。使用 WHERE 来选择较小的数据子集。
  • 将任何查询后处理转移到查询本身。您可以使用 ES|QL STATS 命令在查询中聚合数据。

可以使用以下动态集群设置更改默认和最大限制

  • esql.query.result_truncation_default_size
  • esql.query.result_truncation_max_size

字段类型

编辑

支持的类型

编辑

ES|QL 当前支持以下字段类型

  • 别名
  • 布尔值
  • 日期
  • date_nanos(技术预览)

    • 以下函数尚不支持日期纳秒:bucketdate_formatdate_parsedate_diffdate_extract
    • 您可以使用 to_datetime 转换为毫秒日期以使用不支持的函数
  • doublefloathalf_floatscaled_float 表示为 double
  • ip
  • keyword 系列,包括 keywordconstant_keywordwildcard
  • intshortbyte 表示为 int
  • long
  • null
  • 文本
  • [预览] 此功能为技术预览版,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。 unsigned_long
  • 版本
  • 空间类型

    • geo_point
    • geo_shape
    • point
    • shape

不支持的类型

编辑

ES|QL 尚不支持以下字段类型

  • TSDB 指标

    • 计数器
    • 位置
    • aggregate_metric_double
  • 日期/时间

    • date_range
  • 其他类型

    • 二进制
    • 完成
    • dense_vector
    • double_range
    • 扁平化
    • float_range
    • 直方图
    • integer_range
    • ip_range
    • long_range
    • 嵌套
    • rank_feature
    • rank_features
    • search_as_you_type

查询具有不支持类型的列会返回错误。如果查询中未显式使用具有不支持类型的列,则会返回 null 值,但嵌套字段除外。根本不返回嵌套字段。

对支持类型的限制

编辑

某些字段类型并非在所有上下文中都受支持

  • 空间类型在 SORT 处理命令中不受支持。将其中一种类型的列指定为排序参数将导致错误

    • geo_point
    • geo_shape
    • cartesian_point
    • cartesian_shape

此外,当查询多个索引时,同一字段可能会映射到多种类型。除非显式转换为单一类型,否则这些字段不能直接在查询中使用或在结果中返回。

_source 可用性

编辑

ES|QL 不支持 _source 字段禁用的配置。

[预览] 此功能为技术预览版,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。 ES|QL 对合成 _source 的支持目前是实验性的。

全文搜索

编辑

[预览] 此功能为技术预览版,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。 ES|QL 对全文搜索的支持目前处于技术预览阶段。全文搜索的一个限制是,必须在 FROM 源命令之后或足够接近它的 WHERE 命令中直接使用搜索函数,如 MATCH。否则,查询将失败并出现验证错误。另一个限制是,任何包含全文搜索函数的 WHERE 命令也不能使用析取(OR)。

由于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 处理这些字段的方式与 Search API 不同。ES|QL 查询不会查询或聚合分析的字符串。相反,ES|QL 查询将尝试获取 keyword 系列类型text 字段的子字段并进行查询/聚合。如果无法检索 keyword 子字段,ES|QL 将从文档的 _source 获取字符串。如果无法检索 _source,例如在使用合成源时,则会返回 null

请注意,ES|QL 对 keyword 子字段的检索可能会产生意想不到的后果。对 text 字段的 ES|QL 查询是区分大小写的。此外,子字段可能已使用normalizer进行了映射,这可以转换原始字符串。或者它可能已使用 ignore_above进行了映射,这可以截断字符串。这些映射操作均未应用于 ES|QL 查询,这可能会导致误报或漏报。

为了避免这些问题,最佳做法是明确指定要查询的字段,并查询 keyword 子字段而不是 text 字段。

不支持时间序列数据流

编辑

ES|QL 不支持查询时间序列数据流 (TSDS)。

日期数学限制

编辑

当最左边的表达式是日期时间时,日期数学表达式效果很好,例如

now() + 1 year - 2hour + ...

但并非总是支持使用括号或将日期时间放在右边。例如,以下表达式失败

1year + 2hour + now()
now() + (1year + 2hour)

日期数学不允许减去两个日期时间,例如

now() - 2023-10-26

富化限制

编辑

虽然支持所有三种富化策略类型,但需要注意一些限制

  • geo_match 富化策略类型仅支持 intersects 空间关系。
  • 要求 ENRICH 命令中的 match_field 具有正确的类型。例如,如果富化策略的类型为 geo_match,则 ENRICH 命令中的 match_field 必须为 geo_pointgeo_shape 类型。同样,range 富化策略需要 match_field 的类型为 integerlongdateip,具体取决于原始富化索引中范围字段的类型。
  • 但是,当 match_field 的类型为 KEYWORD 时,此约束对于 range 策略是放宽的。在这种情况下,将在查询执行期间逐行解析字段值。如果任何值无法解析,则该行的输出值将设置为 null,将生成适当的警告,并且查询将继续执行。

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 的响应太长。请使用 DROPKEEP 来限制返回的字段数量。