你可以
- 按 traceID 分组
- 只取一个按日期排序的结果,或者在“消息”字段中过滤 1 个带有“开始”的结果
这里有一些例子:
{
"size": 0,
"aggs": {
"group_by_trace": {
"terms": {
"field": "TraceId.keyword",
"size": 10,
"min_doc_count": 2
},
"aggs": {
"startt_request": {
"top_hits": {
"sort": [
{
"date": {
"order": "asc"
}
}
],
"_source": {
"includes": [
"date",
"message",
"TraceId"
]
},
"size": 1
}
}
}
}
}
}
然后回应:
{
"aggregations" : {
"group_by_trace" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "7ec708ab153e644f",
"doc_count" : 2,
"startt_request" : {
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "testlog",
"_type" : "_doc",
"_id" : "SOvlZXYBTUPHNNy0GTa-",
"_score" : null,
"_source" : {
"date" : "Dec 10, 2020 @ 10:49:50.285",
"TraceId" : "7ec708ab153e644f",
"message" : "New request start http://somehost/path1"
},
"sort" : [
"Dec 10, 2020 @ 10:49:50.285"
]
}
]
}
}
},
{
"key" : "b880dfa9c4fd39ad",
"doc_count" : 2,
"startt_request" : {
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "testlog",
"_type" : "_doc",
"_id" : "rqLlZXYBcOugy9Fj5LZp",
"_score" : null,
"_source" : {
"date" : "Dec 10, 2020 @ 10:49:54.285",
"TraceId" : "b880dfa9c4fd39ad",
"message" : "New request start http://somehost/path3"
},
"sort" : [
"Dec 10, 2020 @ 10:49:54.285"
]
}
]
}
}
}
]
}
}
}
或者更好的是,您可以使用过滤器:
GET /_search?filter_path=aggregations.group_by_trace.buckets.start_messages.buckets.start.start_request.hits.hits
{
"size": 0,
"aggs": {
"group_by_trace": {
"terms": {
"field": "TraceId.keyword",
"size": 10,
"min_doc_count": 2
},
"aggs": {
"start_messages": {
"filters": {
"filters": {
"start": {
"match": {
"message": "start"
}
}
}
},
"aggs": {
"start_request": {
"top_hits": {
"_source": {
"includes": [
"date",
"message",
"TraceId"
]
},
"size": 1
}
}
}
}
}
}
}
}
然后回应:
{
"aggregations" : {
"group_by_trace" : {
"buckets" : [
{
"start_messages" : {
"buckets" : {
"start" : {
"start_request" : {
"hits" : {
"hits" : [
{
"_index" : "testlog",
"_type" : "_doc",
"_id" : "SOvlZXYBTUPHNNy0GTa-",
"_score" : 1.0,
"_source" : {
"date" : "Dec 10, 2020 @ 10:49:50.285",
"TraceId" : "7ec708ab153e644f",
"message" : "New request start http://somehost/path1"
}
}
]
}
}
}
}
}
},
{
"start_messages" : {
"buckets" : {
"start" : {
"start_request" : {
"hits" : {
"hits" : [
{
"_index" : "testlog",
"_type" : "_doc",
"_id" : "rqLlZXYBcOugy9Fj5LZp",
"_score" : 1.0,
"_source" : {
"date" : "Dec 10, 2020 @ 10:49:54.285",
"TraceId" : "b880dfa9c4fd39ad",
"message" : "New request start http://somehost/path3"
}
}
]
}
}
}
}
}
}
]
}
}
}