首页 > 解决方案 > Elasticsearch,如何按日期存储数据?

问题描述

我想存储销售的每日统计数据。

每天,我的意思是day of year

从概念上讲,数据如下所示。

{ 
  name: bmw,
  daily_statics : {
     1: { sold_count: 5},
     2: { sold_count: 3},

  ...
     365: {sold_count: 2}
}

我正在尝试在其中创建映射elasticsearch-dsl-py并遇到麻烦。

我想为这个文档创建映射会同样麻烦吗?

我想查看数据的季节性趋势。所以一年中的第 1 天和第 365 天实际上是非常接近的输入点。此外,我只需要一年的数据

标签: elasticsearch

解决方案


您可以让 ES 在动态模板路径匹配的帮助下为您生成映射:

PUT myindex
{
  "mappings": {
    "dynamic_templates": [
      {
        "catch_daily_statistics": {
          "path_match": "daily_statistics.*",
          "mapping": {
            "type": "object",
            "properties": {
              "sold_count": {
                "type": "long"
              }
            }
          }
        }
      }
    ]
  }
}

但是在您继续进行这种架构选择之前,我建议您先检查这个答案,该答案处理了在 dicts-of-dicts 上聚合的困难。

正如@Evaldas 指出的那样,使用每日索引会更合理。但我会选择以下形式的nested字段

POST myindex/_doc
{
  "name": "bmw",
  "daily_stats": [
    {
      "day_date": "2021/01/01",
      "day_iso_num": 1,
      "sold_count": 5
    },
    { ... }
  ]
}

这样你就可以表演了


推荐阅读