在具有不同时间戳的两个文档之间减去数字字段

阿贡达曼托

假设我有这些数据样本:

{
    "date": "2019-06-16",
    "rank": 150
    "name": "doc 1"
}

{
    "date": "2019-07-16",
    "rank": 100
    "name": "doc 1"
}

{
    "date": "2019-06-16",
    "rank": 50
    "name": "doc 2"
}

{
    "date": "2019-07-16",
    "rank": 80
    "name": "doc 2"
}

预期结果是从两个相同名称的不同日期(旧日期 - 新日期)的文档中减去 rank 字段:

{
    "name": "doc 1",
    "diff_rank": 50
}

{
    "name": "doc 2",
    "diff_rank": -30
}

diff_rank尽可能排序,否则我将在获得结果后手动排序。

我尝试过的是使用date_histogramserial_diff但有些结果diff_rank以某种方式丢失了我确信数据存在的值:

{
   "aggs" : {
        "group_by_name": {
            "terms": {
                "field": "name"
            },
            "aggs": {
                "days": {
                    "date_histogram": {
                        "field": "date",
                        "interval": "day"
                     },
                    "aggs": {
                        "the_rank": {
                            "sum": {
                                "field": "rank"
                            }
                        },
                        "diff_rank": {
                           "serial_diff": {
                              "buckets_path": "the_rank",
                              "lag" : 30 // 1 month or 30 days in this case
                           }
                        }
                    }
                }
            }
        }
    }
}

非常感谢帮助解决我上面的问题!

阿贡达曼托

最后,我从官方文档中找到了一种使用FilterBucket Script Aggregation 和Bucket Sort对结果进行排序的方法。这是最终的片段代码:

{
    "size": 0,
    "aggs" : {
        "group_by_name": {
            "terms": {
                "field": "name",
                "size": 50,
                "shard_size": 10000
            },
            "aggs": {
                "last_month_rank": {
                    "filter": {
                        "term": {"date": "2019-06-17"}
                     },
                    "aggs": {
                        "rank": {
                            "sum": {
                                "field": "rank"
                            }
                        }
                    }
                },
                "latest_rank": {
                    "filter": {
                        "term": {"date": "2019-07-17"}
                     },
                    "aggs": {
                        "rank": {
                            "sum": {
                                "field": "rank"
                            }
                        }
                    }
                },
                "diff_rank": {
                    "bucket_script": {
                        "buckets_path": {
                          "lastMonthRank": "last_month_rank>rank",
                          "latestRank": "latest_rank>rank"
                        },
                        "script": "params.lastMonthRank - params.latestRank"
                    }
                },
                "rank_bucket_sort": {
                    "bucket_sort": {
                        "sort": [
                            {"diff_rank": {"order": "desc"}}
                        ],
                        "size": 50
                    }
                }
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在相同时区的两个区域中相同的Unix时间戳具有不同的结果

用参数显示两个不同时间之间的所有时间

两个setIntervals没有按顺序激活并在不同时间触发

在两个不同时间之间运行作业计划程序

将具有不同时间戳的两行数据匹配为一行(SQL Server)

SparkSQL:如何对两个具有不同时间戳的时间序列数据集求和

如何合并具有不同时间戳密度的两个熊猫数据帧?

如何在python中的同一轴上绘制具有不同时间频率的两个时间序列数据?

查找两个不同时间之间是否存在时间,键入问题

同一ChartJs图表上具有不同时间实例的两个数据集

同一日期两个不同时间之间的值差

合并两个具有不同时间粒度的时间序列

“复制但保留两个文件”,但仅适用于具有不同时间戳记的文件

用numpy减去两个交错的,基于不同时间序列的数组?

合并具有不同时间戳格式的日志文件

SQL查询以合并两个具有不同时间戳的表作为索引

带有两个不同时间索引的熊猫数据帧操作(除法乘法)

如何在Python Matplotlib中绘制两个具有不同时间间隔的数据集并使它们共享轴

如何合并两个具有不同时间戳的熊猫

如何关联具有相同日期但不同时间的两个字段

SQL 输出 - 包括来自不同表的具有相同时间戳的列

如何在R中同步具有部分不同时间戳的数据

合并具有不同时间戳(不同时间间隔)的两个数据帧

比较 R 中具有不同时间戳的时间序列

Bash 命令对具有不同时间序列行的两个 csv 文件进行列合并

如何合并具有不同时间戳的两个不同数据帧?

获取具有相同时间戳但不同标识符的记录

如何删除包含相同字段但具有不同时间戳的旧数据的 Sqlite 行?

如何并排组合两个具有不同时间框架但有空白的 Panda 数据框