搜索间隔不到X分钟的2条ES条目

我有一个带有事件(日志)的ES索引,我想搜索在接下来的5分钟内出现1个A型事件,然后是1个B型事件的事件。我对ES还是很陌生,所以我确定实现此目标的最佳方法是什么,我认为聚合可能是个好方法,但我看不到任何满足此需求的方法。

示例
我有以下事件

{ id: 1,timestamp: "2019-11-08 10:00",type: "A" },{ id: 2,timestamp: "2019-11-08 10:01",type: "B" },{ id: 3,timestamp: "2019-11-08 10:07",{ id: 4,timestamp: "2019-11-08 10:10",{ id: 5,timestamp: "2019-11-08 10:20",type: "B" }

我想找到一种输出“相关”事件的方法,例如(此处的输出格式不是导入的,我可以根据需要进行调整,仅“相关”信息很重要)

{ "id" : [1,2] },{ "id" : [3,4] }

因为事件1和2在彼此的5分钟之内发生,事件3和4也在5分钟之内发生。事件5与其他任何事件都不“相关”,因此不在结果中

haitv223 回答:搜索间隔不到X分钟的2条ES条目

对于初学者来说,您可以利用date_histogram aggregation

首先,为某些文档建立索引:

POST test/_doc/_bulk
{"index":{"_id": "1"}}
{ "id": 1,"timestamp": "2019-11-08T10:00:00","type": "A" }
{"index":{"_id": "2"}}
{ "id": 2,"timestamp": "2019-11-08T10:01:00","type": "B" }
{"index":{"_id": "3"}}
{ "id": 3,"timestamp": "2019-11-08T10:07:00","type": "A" }
{"index":{"_id": "4"}}
{ "id": 4,"timestamp": "2019-11-08T10:09:00","type": "B" }
{"index":{"_id": "5"}}
{ "id": 5,"timestamp": "2019-11-08T10:20:00","type": "B" }

然后运行一个查询,该查询每隔5分钟汇总一次文档:

POST test/_search
{
  "size": 0,"aggs": {
    "history": {
      "date_histogram": {
        "field": "timestamp","interval": "5m","min_doc_count": 1
      },"aggs": {
        "hits": {
          "top_hits": {
            "_source": false
          }
        }
      }
    }
  }
}

您将看到预期的结果。在第一个存储桶中,您将看到文档1和2,在第二个存储桶中,您将看到文档3和4,在第三个存储桶中将文档5看到。

本文链接:https://www.f2er.com/3139010.html

大家都在问