我有一个带有事件(日志)的ES索引,我想搜索在接下来的5分钟内出现1个A型事件,然后是1个B型事件的事件。我对ES还是很陌生,所以我确定实现此目标的最佳方法是什么,我认为聚合可能是一个好方法,但我认为没有任何适合此需求的方法。
示例:
我有以下 Activity
{ 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", type: "A" },
{ id: 4, timestamp: "2019-11-08 10:10", type: "B" },
{ id: 5, timestamp: "2019-11-08 10:20", type: "B" }
我想找到一种输出“相关”事件的方法,例如(这里的输出格式不是导入的,我可以根据需要进行调整,仅“相关”信息很重要)
{ "id" : [1, 2] },
{ "id" : [3, 4] }
因为事件1和2在彼此的5分钟之内发生,事件3和4也在5分钟之内发生。事件5与任何其他事件都不“相关”,因此不在结果中
最佳答案
对于初学者,您可以利用 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。
关于elasticsearch - 搜索间隔不到X分钟的2条ES条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763977/