elasticsearch 使用标记器对弹性搜索中的文档进行分组,elasticsearch,elasticsearch" /> elasticsearch 使用标记器对弹性搜索中的文档进行分组,elasticsearch,elasticsearch" />

elasticsearch 使用标记器对弹性搜索中的文档进行分组

elasticsearch 使用标记器对弹性搜索中的文档进行分组,elasticsearch,elasticsearch,我对ES没有深入的了解,但我的老板让我负责汇总/分组错误消息,这样我们就可以看到错误消息出现的频率 这些文件看起来像 { "_index": "fluentd.php.error.20191223", "_type": "_doc", "_id": "0zYPM28B9xbIWtpXrXSt", "_version": 1, "_score": null, "_source": { "message": "WARNING Invalid argument supp

我对ES没有深入的了解,但我的老板让我负责汇总/分组错误消息,这样我们就可以看到错误消息出现的频率

这些文件看起来像

{
  "_index": "fluentd.php.error.20191223",
  "_type": "_doc",
  "_id": "0zYPM28B9xbIWtpXrXSt",
  "_version": 1,
  "_score": null,
  "_source": {
    "message": "WARNING Invalid argument supplied for foreach() /var/www/class/bootstrap.php:9 /product-1",
    "hostname": "webserver-1",
    "@timestamp": "2019-12-23T14:19:04+0100",
    "@log_name": "php.error"
  },
  "fields": {
    "@timestamp": [
      "2019-12-23T14:19:04.000Z"
    ]
  },
  "sort": [
    1577109544000
  ]
}
罪魁祸首是,两条消息不同,但在同一文件中(在不同的url下)存在相同的错误


ES甚至有可能检测到这种语义吗?这些信息可能在许多方面有所不同。

这是一个有趣的问题,我认为没有一个直截了当的答案。我能想到的方法之一就是使用

上面给出了类似于:

{
..
"aggregations" : {
    "group" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "WARNING Invalid argument supplied for foreach() ",
          "doc_count" : 2
        }
      ]
    }
  }
..
}
您可以根据数据分析和获取错误类型等,根据需要使用脚本并按摩数据

GET /_search
{
  "aggs": {
    "group": {
      "terms": {
        "script": """
        int endIndex = doc['message.keyword'].value.indexOf("/");
        return doc['message.keyword'].value.substring(0,endIndex);"""
      }
    }
  }
}
{
..
"aggregations" : {
    "group" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "WARNING Invalid argument supplied for foreach() ",
          "doc_count" : 2
        }
      ]
    }
  }
..
}