ES|QL 限制

edit

结果集大小限制

edit

默认情况下,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

字段类型

edit

支持的类型

edit

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

  • alias
  • boolean
  • date
  • double (float, half_float, scaled_float 表示为 double)
  • ip
  • keyword 系列,包括 keyword, constant_keyword, 和 wildcard
  • int (shortbyte 表示为 int)
  • long
  • null
  • text
  • [预览] 此功能处于技术预览阶段,可能会在未来的版本中进行更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。 unsigned_long
  • version
  • 空间类型

    • geo_point
    • geo_shape
    • point
    • shape

不支持的类型

edit

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

  • TSDB 指标

    • counter
    • position
    • aggregate_metric_double
  • 日期/时间

    • date_nanos
    • date_range
  • 其他类型

    • binary
    • completion
    • dense_vector
    • double_range
    • flattened
    • float_range
    • histogram
    • integer_range
    • ip_range
    • long_range
    • nested
    • rank_feature
    • rank_features
    • search_as_you_type

查询不支持类型的列会返回错误。如果一个不支持类型的列在查询中没有被显式使用,它将返回null值,但嵌套字段除外。嵌套字段根本不会返回。

对支持类型的限制

edit

一些字段类型在所有上下文中并不都受支持:

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

    • geo_point
    • geo_shape
    • cartesian_point
    • cartesian_shape

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

_source 可用性

edit

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

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

不支持全文搜索

edit

由于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 字段

edit

虽然 ES|QL 支持 text 字段,但 ES|QL 不会像搜索 API 那样处理这些字段。ES|QL 查询不会查询或聚合 分析后的字符串。相反,ES|QL 查询将尝试获取 text 字段的 关键词类型系列 的子字段并对其进行查询/聚合。如果无法检索到 keyword 子字段,ES|QL 将从文档的 _source 中获取字符串。如果无法检索 _source,例如在使用合成源时,将返回 null

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

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

不支持时间序列数据流

edit

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

日期数学限制

edit

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

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

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

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

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

now() - 2023-10-26

丰富限制

edit

ES|QL 的 ENRICH 命令仅支持类型为 match 的丰富策略。 此外,ENRICH 仅支持在类型为 keyword 的列上进行丰富。

剖析限制

edit

The DISSECT 命令不支持引用键。

Grok 限制

edit

The GROK 命令不支持配置 自定义模式,或 多个模式。The GROK 命令不受 Grok watchdog 设置的限制。

多值限制

edit

ES|QL 支持多值字段,但函数在应用于多值字段时会返回null,除非另有说明。可以通过使用多值函数之一将字段转换为单值来解决此限制。

时区支持

edit

ES|QL 仅支持 UTC 时区。

Kibana 限制

edit
  • 当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来限制返回的字段数量。