elasticsearch - Elasticsearch:记录更改索引的历史
问题描述
我们使用弹性搜索来存储与客户使用的功能相关的数据。feature-usage
例如,每次客户激活或停用一项功能时,该索引都会更新。
样本数据:
Customer ID, Uses feature A, Uses feature B
1 , true , false
2 , true , true
3 , false , true
4 , true , false
这个数据反映了“现在”。没有附加时间戳。
基于此,我目前可以提供的观点之一是:
- 目前有 3 个客户使用功能 A。
- 目前有 2 个客户使用功能 B。
我希望能够显示此数据的历史记录:
- 昨天有 2 位客户使用了功能 A
- 1 位客户在 2 天前使用了功能 A
本质上,我想创建一个图表来显示功能使用的演变。为此,我需要存储历史数据,我想它看起来像这样:
Day , customers using feature A, customers using feature B
2021-05-17, 2 , 1
2021-05-18, 3 , 1
2021-05-19, 2 , 2
在 SQL 数据库上,我可能会运行每晚的 cron 作业来生成这些数据。我尝试使用弹性搜索的转换和汇总,但我想不出一个好的解决方案。
有没有办法转换feature-usage
成这里显示的历史数据,只使用弹性搜索而不使用外部代码/cron 作业?
解决方案
您可以为索引提供一个摄取管道,该管道在摄取数据时添加当前时间戳。所以你会有历史信息。
您可以定义官方文档中报告的示例管道
PUT _ingest/pipeline/my-pipeline
{
"processors": [
{
"set": {
"description": "Index the ingest timestamp as 'event.ingested'",
"field": "event.ingested",
"value": "{{{_ingest.timestamp}}}"
}
}
]
}
然后,您可以为索引设置默认管道:
PUT feature-usage
{
"index.default_pipeline": "my-pipeline"
}
现在您应该有event.ingested
每个文档的时间戳 ( )。现在您应该能够使用 date_histograms 并找到您寻求的答案。
这个想法是,首先您根据日期聚合数据,然后根据条件执行计数。
亲切的问候,米尔科
推荐阅读
- javascript - 如何强制网页在所有设备中具有相同的规模?
- wpf - 如何在 WPF - VB.NET 中刷新 CrystalReportViewer?
- php - 会话已设置,但第一次转到另一个页面后无法正常工作
- c++ - 如何将编译时元数据/行为添加到特定功能
- bash - 如何使用带有日期戳的 bash 脚本将 crontab 作业添加到 crontab?
- python - 解密已在 python 中加密的 typescript 中的数据
- java - 如何给我的简单 java 程序内存?
- reactjs - 为什么我会收到错误 TS2339:“从不”类型上不存在属性“classList”?
- android - 使用导航组件防止底部导航视图中的循环导航逻辑
- excel - 从 Excel VBA 项目加载 dbf Foxpro 文件