何时使用转换

编辑

Elasticsearch 聚合是一个强大而灵活的功能,它使您能够总结和检索有关数据的复杂见解。您可以总结复杂的事物,例如繁忙网站上每天的网页请求数量,并按地理位置和浏览器类型进行细分。但是,如果您使用相同的数据集尝试计算访客网页会话平均持续时间的单个数字等简单内容,则可能会很快耗尽内存。

为什么会发生这种情况?网页会话持续时间是行为属性的一个示例,该属性不在任何一条日志记录中保存;它必须通过查找网络日志中每个会话的第一条和最后一条记录来推导出来。此推导需要一些复杂的查询表达式和大量的内存来连接所有数据点。如果您有一个持续的后台进程,它将来自一个索引的相关事件融合到另一个索引中的以实体为中心的摘要中,那么您将获得更实用、更完整的视图。这个新索引有时被称为数据帧

在以下情况下,您可能需要考虑使用转换而不是聚合:

  • 您需要一个完整的特征索引,而不是前 N 个项目。

    在机器学习中,您通常需要完整的行为特征集,而不仅仅是前 N 个。例如,如果您要预测客户流失,您可能会查看诸如过去一周的网站访问次数、销售总额或发送的电子邮件数量等特征。Elastic Stack 机器学习功能基于此多维特征空间创建模型,因此它们受益于转换创建的完整特征索引。

    当您尝试搜索聚合结果或多个聚合结果时,这种情况也适用。聚合结果可以进行排序或过滤,但是排序存在限制,并且按桶选择器进行过滤 受返回的桶的最大数量的限制。如果您想搜索所有聚合结果,则需要创建完整的数据帧。如果您需要按多个字段对聚合结果进行排序或过滤,则转换特别有用。

  • 您需要按管道聚合对聚合结果进行排序。

    管道聚合 不能用于排序。从技术上讲,这是因为管道聚合在所有其他聚合完成后在归约阶段运行。如果您创建转换,则可以有效地对数据进行多次处理。

  • 您想创建摘要表以优化查询。

    例如,如果您有一个由大量用户访问的高级仪表板,并且它对大型数据集使用了复杂的聚合,那么创建转换以缓存结果可能会更高效。因此,每个用户都不需要运行聚合查询。