加载中

运行时字段

运行时字段(Runtime field)是在查询时进行求值的字段。运行时字段使您能够:

  • 在不重索引数据的情况下向现有文档添加字段
  • 无需了解数据结构即可开始处理数据
  • 在查询时覆盖索引字段返回的值
  • 为特定用途定义字段,而无需修改底层模式

您可以像访问任何其他字段一样从搜索 API 访问运行时字段,Elasticsearch 对运行时字段的处理方式与其他字段没有区别。您可以在 索引映射 中或在 搜索请求 中定义运行时字段。您可以根据需要进行选择,这也是运行时字段固有灵活性的一部分。

使用 _search API 上的 fields 参数来 检索运行时字段的值。运行时字段不会显示在 _source 中,但 fields API 适用于所有字段,即使是那些未作为原始 _source 一部分发送的字段。

当处理日志数据时(请参阅 示例),运行时字段非常有用,特别是当您不确定数据结构时。虽然搜索速度会降低,但索引大小会小得多,并且您可以更快地处理日志,而无需对其进行索引。

因为运行时字段不会被索引,所以添加运行时字段不会增加索引大小。您可以直接在索引映射中定义运行时字段,从而节省存储成本并提高摄入速度。您可以更快地将数据摄入到 Elastic Stack 中并立即访问它。当您定义运行时字段时,您可以立即在搜索请求、聚合、过滤和排序中使用它。

如果您将运行时字段更改为索引字段,则无需修改任何引用该运行时字段的查询。更好的是,您可以引用某些索引(其中该字段是运行时字段),同时引用其他索引(其中该字段是索引字段)。您可以灵活地选择哪些字段要进行索引,哪些字段要保留为运行时字段。

从根本上讲,运行时字段最重要的优势是在摄入文档后能够向其添加字段。这种能力简化了映射决策,因为您不必预先决定如何解析数据,并且可以随时使用运行时字段来修改映射。使用运行时字段可以实现更小的索引和更快的摄入时间,结合起来可以减少资源使用并降低运营成本。

运行时字段可以替代您在使用 _search API 时编写脚本的许多方式。您使用运行时字段的方式受到所包含脚本运行的文档数量的影响。例如,如果您使用 _search API 上的 fields 参数来 检索运行时字段的值,则脚本仅针对最顶部的命中结果运行,类似于脚本字段。

您可以使用 脚本字段 来访问 _source 中的值,并根据脚本评估返回计算后的值。运行时字段具有相同的功能,但提供了更大的灵活性,因为您可以在搜索请求中对运行时字段进行查询和聚合。脚本字段只能获取值。

同样,您可以编写 脚本查询,根据脚本过滤搜索请求中的文档。运行时字段提供了一个类似但更灵活的功能。您编写一个脚本来创建字段值,它们随处可用,例如 fields所有查询聚合

您还可以使用脚本来 对搜索结果进行排序,但该脚本在运行时字段中的工作方式完全相同。

如果您将搜索请求中这些部分中的任何脚本移动到计算相同数量文档值的运行时字段中,性能应该大致相同。这些功能的性能很大程度上取决于所包含脚本运行的计算以及脚本针对多少文档运行。

运行时字段使用的磁盘空间更少,并且为您访问数据的方式提供了灵活性,但会根据运行时脚本中定义的计算影响搜索性能。

为了平衡搜索性能和灵活性,请索引您经常搜索和过滤的字段,例如时间戳。当运行查询时,Elasticsearch 会自动优先使用这些索引字段,从而获得快速的响应时间。然后,您可以使用运行时字段来限制 Elasticsearch 需要计算值的字段数量。将索引字段与运行时字段结合使用,可以为您索引的数据以及定义其他字段的查询方式提供灵活性。

使用 异步搜索 API 来运行包含运行时字段的搜索。这种搜索方法有助于抵消在包含该字段的每个文档中计算运行时字段值所带来的性能影响。如果查询无法同步返回结果集,您将在结果可用时异步获取它们。

重要提示

针对运行时字段的查询被视为昂贵的查询。如果 search.allow_expensive_queries 设置为 false,则不允许昂贵的查询,Elasticsearch 将拒绝任何针对运行时字段的查询。

在 ES|QL 中,在索引映射中定义的运行时字段的功能与常规映射字段相同。但是,ES|QL 不支持在搜索时定义新的运行时字段。要在查询时创建计算列,请改用 EVAL 命令。

运行时字段也不同于未映射字段。有关 ES|QL 如何处理映射中不存在的字段的信息,请参阅 未映射字段

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.