elasticsearch - Elasticsearch术语聚合和查询

标签 elasticsearch filter group-by elasticsearch-aggregation

我有两种日志消息:

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_1563866656871111111.0.dn”与“Aweg3AOMTs_1563866656871111.mt”不同)。

通过查看docs结构,我认为您最好在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 - Elasticsearch术语聚合和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252385/

相关文章:

elasticsearch - 如何通过修改Elasticsearch源代码来更改Elasticsearch文档源内容?

python - 递归地过滤元组内的元组

mysql - 测量 mysql 5.7.* 中 group by 子句的性能

sql - postgresql中的分组问题

python - 获取非重复值计数大于指定值的列

elasticsearch - Elasticsearch-递归嵌套JSON对象

sorting - 文档的重新评分和排序

elasticsearch - 使用 ElasticSearch 获取类别的所有可能聚合

arrays - Swift:如何获得两个结构数组之间的差异

list - 根据多个包含过滤列表