ElasticSearch 分组和聚合

用户72003

我在 ES 中有一堆网络流量日志,想为每个 source:dest 对获取一些高级统计信息。

在 SQL 中,我会执行以下操作:

SELECT src, dst, SUM(bytes)
FROM net_traffic
WHERE start>1518585000000
AND end<1518585300000
GROUP BY src, dst

开始结束只是看到流量的纪元时间)

如何从存储在 ES 中的数据中提取相同的信息?

我正在用 Ruby 编写解决方案,但理想情况下只想要一个 ES 查询来提取数据 - 所以解决方案希望与实现语言无关。

穆罕默德·阿克巴里 |

ElasticSearch 支持子聚合。您必须使用 from ,然后在您的应用程序端将查询结果转换为您想要的。

询问:

{
    "size": 0,
    "aggs": {
        "src_agg": {
            "terms": {
                "field": "src"
            },
            "aggs": {
                "dst_agg": {
                    "terms": {
                        "field": "dst"
                    }
                }
            }
        }
    }
}

结果样本:

{
    "key": "X1",
    "doc_count": 5,
    "agg2": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
            "key": "Y1",
            "doc_count": 2 // ***
        },
        {
            "key": "Y2",
            "doc_count": 3  // ***
        }]
    }
}

您可以从 *** 结果中提取所需的数据:

(X1, Y1) = 2, (X1, Y2) = 3

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章