【问题标题】:Elasticsearch, how to store data per date?Elasticsearch,如何按日期存储数据?
【发布时间】:2021-01-29 09:27:44
【问题描述】:

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

每天,我的意思是day of year

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

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

  ...
     365: {sold_count: 2}
}

我正在尝试在elasticsearch-dsl-py 中创建映射,但遇到了问题。

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

  • 编辑

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

【问题讨论】:

  • 您打算如何查询您的数据?拥有每日索引是一个更好的选择。
  • 我想查看数据的季节性趋势。所以一年中的第 1 天和第 365 天实际上是非常接近的输入点。此外,我只需要一年的数据。

标签: elasticsearch


【解决方案1】:

你可以在dynamic template path matching的帮助下让ES为你生成映射:

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

但在您继续选择此架构之前,我建议您先查看 this answer,它处理了在 dicts-of-dicts 上聚合的困难。

@Evaldas 指出,使用每日索引会更合理。但我会选择nested fields 的形式:

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

这样你就可以表演了

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多