elasticsearch - 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 天实际上是非常接近的输入点。此外,我只需要一年的数据
解决方案
您可以让 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
},
{ ... }
]
}
这样你就可以表演了
range
查询_day_date
- 范围和
term
查询day_iso_num
(因为一年中的每一天都不同…… ) - 和任何
metric
aggs(除其他外)sold_count
推荐阅读
- java - Java, Maven, connect SQL , 没有合适的驱动
- pip - 如何将 mpi4py 与 intelmpi 链接
- javascript - setTimeout 晚于 Promise
- r - 如何从 tbats 函数中获取模型名称,R 中的预测包
- algorithm - 获得最接近的字符串匹配(字符串大小可能非常不同)
- node.js - 如何获得在语音频道中讲话的时间?
- java - 带有光标的 setMultiChoiceItems 未填充列表
- python - 如何避免优先级队列中的饥饿
- sql - 使用 Presto 查询 Hive 表时,当该列不存在数据时,如何返回列的值?
- ios - 带有导入的 UTI 的文件在 UIDocumentPickerViewController 中显示为灰色