当前位置:首页 > 编程笔记 > 正文
已解决

Elasticsearch:ES|QL 的限制

来自网友在路上 153853提问 提问时间:2023-11-07 23:53:23阅读次数: 53

最佳答案 问答题库538位专家为你答疑解惑

尽管 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 (floathalf_floatscaled_float are represented as double)
  • ip
  • keyword family including keywordconstant_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)。

日期数学限制

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

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

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

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

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

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 的响应太长。 使用 DROP 或 KEEP 来限制返回的字段数。
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Elasticsearch:ES|QL 的限制":http://eshow365.cn/6-34857-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!