在弹性文档中,它表示如果我使用script
(reference),我可以执行多项聚合。我不清楚这是如何完成的。基本上我所追求的是count(*) ... group by logsource,pid
。如果没有脚本,我似乎只能通过一组来完成。
有人能告诉我一个例子吗?
答案 0 :(得分:1)
使用脚本可能代价高昂,但要回答您的问题,
POST /_search
{
"size": 0,
"aggs": {
"test": {
"terms": {
"script": "doc['logsource'].value+\":\"+doc['pid'].value",
"size": 0
}
}
}
}
会的!
答案 1 :(得分:0)
我认为通过使用子聚合,我可以得到预期的结果,例如:
{
"query" : {
"match": {
"message": "error"
}
},
"aggs": {
"g_logsource": {
"terms": {
"field": "logsource"
},
"aggs": {
"g_pid": {
"terms": {
"field": "pid"
},
"aggs" : {
"ts" : {
"date_histogram" : {
"field" : "@timestamp",
"interval" : "1h"
}
}
}
}
}
}
}
}
返回:
"aggregations": {
"g_logsource": {
"doc_count_error_upper_bound": 0,
"buckets": [
{
"key": "nyhq",
"doc_count": 2129,
"g_pid": {
"doc_count_error_upper_bound": 5,
"buckets": [
{
"key": "5641",
"doc_count": 9,
"ts": {
"buckets": [
{
"key_as_string": "2014-12-07T04:00:00.000Z",
"key": 1417924800000,
"doc_count": 2
},
{
"key_as_string": "2014-12-07T08:00:00.000Z",
"key": 1417939200000,
"doc_count": 4
},
{
"key_as_string": "2014-12-07T18:00:00.000Z",
"key": 1417975200000,
"doc_count": 1
},
{
"key_as_string": "2014-12-07T20:00:00.000Z",
"key": 1417982400000,
"doc_count": 2
}
]
}
},
{
"key": "14839",
"doc_count": 3,
"ts": {
"buckets": [
{
"key_as_string": "2014-12-07T09:00:00.000Z",
"key": 1417942800000,
"doc_count": 1
},
{
"key_as_string": "2014-12-07T20:00:00.000Z",
"key": 1417982400000,
"doc_count": 2
}
]
}
}
在我的代码中,我可以将组合{logsource: nyhq, pid: 5641}
组合为每个时间序列的标识符。我认为这与SQL中的GROUP BY
相同。非常感谢任何确认这一点的评论。