首页 > 解决方案 > Elasticsearch:记录更改索引的历史

问题描述

我们使用弹性搜索来存储与客户使用的功能相关的数据。feature-usage例如,每次客户激活或停用一项功能时,该索引都会更新。

样本数据:

Customer ID, Uses feature A, Uses feature B
1          , true          , false
2          , true          , true
3          , false         , true
4          , true          , false

这个数据反映了“现在”。没有附加时间戳。

基于此,我目前可以提供的观点之一是:

我希望能够显示此数据的历史记录:

本质上,我想创建一个图表来显示功能使用的演变。为此,我需要存储历史数据,我想它看起来像这样:

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 作业?

标签: elasticsearch

解决方案


您可以为索引提供一个摄取管道,该管道在摄取数据时添加当前时间戳。所以你会有历史信息。

您可以定义官方文档中报告的示例管道

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 并找到您寻求的答案。

这个想法是,首先您根据日期聚合数据,然后根据条件执行计数。

亲切的问候,米尔科


推荐阅读