何时使用转换
Elastic Stack Serverless
Elasticsearch 聚合是一项强大而灵活的功能,使您能够汇总和检索有关数据的复杂见解。您可以汇总复杂的事项,例如繁忙网站上每天的 Web 请求数量,并按地理位置和浏览器类型进行细分。但是,如果您使用相同的数据集来尝试计算一些简单的内容,例如访问者 Web 会话的平均持续时间的一个数字,您可能会很快耗尽内存。
为什么会发生这种情况?Web 会话持续时间就是一个行为属性的例子,它没有保存在任何一个日志记录中;它必须通过查找 Weblogs 中每个会话的第一个和最后一个记录来推导。这种推导需要一些复杂的查询表达式和大量内存来连接所有数据点。如果您有一个正在进行的后台进程,将一个索引中的相关事件融合到另一个索引中以实体为中心的摘要中,您将获得更有用、更连贯的图片。这个新的索引有时被称为数据帧。
在以下情况下,您可能需要考虑使用转换而不是聚合:
您需要一个完整的特征索引,而不是一个前 N 个项目的集合。
在机器学习中,您通常需要完整的行为特征集,而不仅仅是前 N 个。例如,如果您要预测客户流失,您可能会查看诸如过去一周的网站访问次数、总销售额或发送的电子邮件数量等特征。Elastic Stack 机器学习功能基于此多维特征空间创建模型,因此它们受益于由转换创建的完整特征索引。
当您尝试搜索聚合或多个聚合的结果时,此场景也适用。聚合结果可以排序或过滤,但 排序存在限制,并且按 bucket selector 进行过滤受到返回的最大 bucket 数量的限制。如果您想搜索所有聚合结果,则需要创建完整的数据帧。如果您需要按多个字段对聚合结果进行排序或过滤,则转换特别有用。
您需要按管道聚合对聚合结果进行排序。
管道聚合不能用于排序。从技术上讲,这是因为管道聚合在所有其他聚合完成后在 reduce 阶段运行。如果您创建转换,您可以有效地对数据执行多次传递。
您想创建摘要表以优化查询。
例如,如果您有一个高级仪表板,大量用户访问它,并且它使用对大型数据集的复杂聚合,那么创建转换来缓存结果可能更有效。因此,每个用户都不需要运行聚合查询。
您需要考虑迟到的数据。
在某些情况下,当转换运行时,数据可能无法立即获得,从而导致目标索引中缺少记录。这可能是由于摄取延迟造成的,其中文档在被索引后需要几秒钟或几分钟才能变为可搜索。为了处理这种情况,转换同步配置中的
delay
参数允许您推迟处理新数据。转换不会总是查询最新的记录,而是会跳过一小段时间(例如,60 秒),以确保所有相关数据在处理之前都已到达。例如,如果转换每 5 分钟运行一次,它通常会处理从 5 分钟前到当前时间的数据。但是,如果您将
delay
设置为 60 秒,则转换将改为处理从 6 分钟前到 1 分钟前的数据,从而确保包含任何迟到的文档。通过调整delay
参数,您可以提高转换后数据的准确性,同时仍然保持近乎实时的结果。