• 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 (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 + ...

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

    1. 1year + 2hour + now()
    2. 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 的响应太长。 使用 DROPKEEP 来限制返回的字段数。
  • 相关阅读:
    星戈瑞Sulfo-CY5 maleimide应用于流式细胞术
    MyBatisPlus入门篇2 - 条件查询、查询投影、查询条件、id生成策略、多记录操作、逻辑删除
    重复delete 对象指针后的 异常调用栈怪异 解析
    HTTP协议和抓包工具Fiddler
    前端 j s 递归
    KepServer EX6模拟仿真PlC数据以及点表的复制跟项目的迁移
    分享76个PHP源码总有一个适合你
    深度交流 | 能链科技兰春嘉博士受邀参加中国建设银行内训讲座
    GIS原理篇 地图投影
    web3 React Dapp书写订单 买入/取消操作
  • 原文地址:https://blog.csdn.net/UbuntuTouch/article/details/134259604