何时使用转换

编辑

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

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

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

  • 您需要完整的特征索引而不是 Top-N 项目集。

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

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

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

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

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

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