我在 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] 删除。
我来说两句