Elasticsearch:ES|QL 的限制

尽管 ES|QL 带来性能及使用上的便捷,在实际的使用中,它还是有一些限制。在今天的文章中,我们来列举它的一些限制。

结果集大小限制

默认情况下,ES|QL 查询最多返回 500 行。 你可以使用 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 目前支持以下字段类型:

  • alias
  • boolean
  • date
  • double (float, half_float, scaled_float are represented as double)
  • ip
  • keyword family including keyword, constant_keyword, and wildcard
  • int (short and byte are represented as int)
  • long
  • null
  • text
  • unsigned_long
  • version

不支持的类型

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

  • TSDB metrics

    • counter
    • position
    • aggregate_metric_double
  • Geo/spatial

    • geo_point
    • geo_shape
    • point
    • shape
  • Date/time

    • date_nanos
    • date_range
  • Other types

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

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

文本字段的行为类似于关键字字段

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

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

为了避免这些问题,最佳实践是明确你查询的字段,并查询关键字子字段而不是文本字段。

不支持时间序列数据流

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

日期数学限制

当最左边的表达式是日期时间时,日期数学表达式可以很好地工作,例如:

scss 复制代码
now() + 1 year - 2hour + ...

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

scss 复制代码
1.  1year + 2hour + now()
2.  now() + (1year + 2hour)

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

scss 复制代码
now() - 2023-10-26

丰富限制

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

Kibana 限制

  • 当 Discover 处于 ES|QL 模式时,不会启用用于过滤数据的用户界面。 要过滤数据,请编写一个使用 WHERE 命令的查询。
  • 在 ES|QL 模式下,单击 "Discover" 字段列表中的字段不会显示该字段的快速统计信息。
  • Discover 显示的行数不超过 10,000 行。 此限制仅适用于查询检索并显示在 Discover 中的行数。 查询和聚合在完整数据集上运行。
  • Discover 显示不超过 50 列。 如果查询返回超过 50 列,Discover 仅显示前 50 列。
  • 在没有任何过滤器的情况下一次查询许多索引可能会导致 kibana 出现错误,类似于[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888).。 ES|QL 的响应太长。 使用 DROPKEEP 来限制返回的字段数。
相关推荐
etcix9 分钟前
go cli translator that use bing api and youdao api
开发语言·elasticsearch·golang
Elastic 中国社区官方博客32 分钟前
Elasticsearch:智能搜索 - AI Builder 及 Workflow
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
yeflx34 分钟前
Git孤儿子模块的清理与转换
大数据·git·elasticsearch
曲幽8 小时前
FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀
redis·python·elasticsearch·postgresql·logging·fastapi·web·es·fastapi-cache
Elasticsearch2 天前
为上下文工程构建高效的数据库检索工具
elasticsearch
Elasticsearch5 天前
需要知道某个同义词是否实际匹配了你的 Elasticsearch 查询吗?
elasticsearch
洛森唛7 天前
ElasticSearch查询语句Query String详解:从入门到精通
后端·elasticsearch
洛森唛8 天前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
Elasticsearch10 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
Elasticsearch11 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch