Elasticsearch 术语聚合和查询
Elasticsearch terms aggregation and querying
我有两种类型的日志消息:
Jul 23 09:24:16 rrr mrr-core[222]: Aweg3AOMTs_1563866656871111.mt processMTMessage() #12798 realtime: 5.684 ms
Jul 23 09:24:18 rrr mrr-core[2222]: Aweg3AOMTs_1563866656871111.0.dn processDN() #7750 realtime: 1.382 ms
第一条消息是一种已发送消息,第二条消息是确认消息已送达的消息。
它们的区别是我把"id"分开的后缀可以查询了
这些消息被解析并以下列格式存储在 elasticsearch 中:
messageId: Aweg3AOMTs_1563866656871111.0.dn
text: Aweg3AOMTs
num1: 1563866656871111
num2: 0
suffix: mt/dn
我想知道哪些消息已成功发送,哪些未成功发送。我是 elasticsearch 的初学者,所以我真的很挣扎。
我目前正在尝试术语聚合,但我所能实现的就是这段代码:
GET /my_index3/_search
{
"size": 0,
"aggs": {
"num1": {
"terms": {
"field": "messageId.keyword",
"include": ".*mt*."
}
}
}
}
显示已发送的消息。我不知道如何在那里添加一些过滤器或子句,以便只显示同时具有 mt 和 dn 后缀的消息。
如果有人有想法,我将非常感激:))
运行 messageId.keyword 上的术语聚合不是很好,因为每条消息都不同('Aweg3AOMTs_1563866656871111.0.dn' 与 'Aweg3AOMTs_1563866656871111.mt' 不同)。
从文档结构来看,我认为您最好 运行 num1
上的术语聚合,这是 .mt 和 .dn 消息的公共部分。该聚合将为您提供每个唯一 num1 的消息计数。因此,对于每条收到请求和响应的消息,计数为 2,只有请求的消息计数为 1。
如果你还想看到数字本身,你可以在里面添加一个嵌套聚合,比如大小为 1 的 top-hits 聚合,它会在里面显示 num1
字段:
GET /my_index3/_search {
"size": 0,
"aggs": {
"num1": {
"terms": {
"field": "num1",
"order": {
"_count": "desc"
},
"aggs": {
"count_of_distinct_suffix": {
"cardinality": {
"field": "suffix"
},
"aggs": {
"filter_count_is_2": {
"bucket_selector": {
"buckets_path": {
"the_doc_count": "_count"
},
"script": "the_doc_count == 2"
}
}
}
}
}
}
}
}
}
我有两种类型的日志消息:
Jul 23 09:24:16 rrr mrr-core[222]: Aweg3AOMTs_1563866656871111.mt processMTMessage() #12798 realtime: 5.684 ms
Jul 23 09:24:18 rrr mrr-core[2222]: Aweg3AOMTs_1563866656871111.0.dn processDN() #7750 realtime: 1.382 ms
第一条消息是一种已发送消息,第二条消息是确认消息已送达的消息。
它们的区别是我把"id"分开的后缀可以查询了
这些消息被解析并以下列格式存储在 elasticsearch 中:
messageId: Aweg3AOMTs_1563866656871111.0.dn
text: Aweg3AOMTs
num1: 1563866656871111
num2: 0
suffix: mt/dn
我想知道哪些消息已成功发送,哪些未成功发送。我是 elasticsearch 的初学者,所以我真的很挣扎。
我目前正在尝试术语聚合,但我所能实现的就是这段代码:
GET /my_index3/_search
{
"size": 0,
"aggs": {
"num1": {
"terms": {
"field": "messageId.keyword",
"include": ".*mt*."
}
}
}
}
显示已发送的消息。我不知道如何在那里添加一些过滤器或子句,以便只显示同时具有 mt 和 dn 后缀的消息。
如果有人有想法,我将非常感激:))
运行 messageId.keyword 上的术语聚合不是很好,因为每条消息都不同('Aweg3AOMTs_1563866656871111.0.dn' 与 'Aweg3AOMTs_1563866656871111.mt' 不同)。
从文档结构来看,我认为您最好 运行 num1
上的术语聚合,这是 .mt 和 .dn 消息的公共部分。该聚合将为您提供每个唯一 num1 的消息计数。因此,对于每条收到请求和响应的消息,计数为 2,只有请求的消息计数为 1。
如果你还想看到数字本身,你可以在里面添加一个嵌套聚合,比如大小为 1 的 top-hits 聚合,它会在里面显示 num1
字段:
GET /my_index3/_search {
"size": 0,
"aggs": {
"num1": {
"terms": {
"field": "num1",
"order": {
"_count": "desc"
},
"aggs": {
"count_of_distinct_suffix": {
"cardinality": {
"field": "suffix"
},
"aggs": {
"filter_count_is_2": {
"bucket_selector": {
"buckets_path": {
"the_doc_count": "_count"
},
"script": "the_doc_count == 2"
}
}
}
}
}
}
}
}
}