Elasticsearch术语汇总和查询(Elasticsearch terms aggregati

2019-09-26 04:15发布

我有两个类型的日志消息:

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后缀的消息。

如果任何人有一个想法,我会真的很感谢:))

Answer 1:

运行上messageId.keyword术语聚集并不好,因为每个消息是不同的(“Aweg3AOMTs_1563866656871111.0.dn”是不一样的“Aweg3AOMTs_1563866656871111.mt”)。

从看文档的结构,我想你最好运行条件聚集num1这是.mt和.DN信息的公共部分。 这一总会给你消息的次数为每一个独特NUM1。 因此,对于其中得到每个消息的请求响应&的计数将是2,只有请求的消息将具有1的计数。

如果你也想看到自己的号码,可以在里面添加一个嵌套的聚集,像顶级命中聚集大小为1,这将显示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"
                            }
                        }
                    }
                }
            }
          }
       }
    }
}


文章来源: Elasticsearch terms aggregation and querying