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

标签 elasticsearch

我有一个带有事件(日志)的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/

相关文章:

Elasticsearch 5 在内存中创建节点进行测试

azure - 如何发布到安装在Azure VM上的LogStash?

elasticsearch - 什么是IElasticSearchResponse.NumberOfRetries的Elasticsearch.Net 2.x等效项?

ruby-on-rails - 如何在Rails Elasticsearch上模糊匹配 ruby 。

database - 我们可以在 mongoDB 上使用 elasticsearch 吗?

php - 如何在Elasticsearch PHP中执行前缀查询?

python - 如何更改 Elasticsearch 8 中不推荐使用 'body' 参数的语法?

lucene - 具有开始和结束时间的 ElasticSearch 直方图和 Kibana

elasticsearch - SearchGuard社区版-Rest API

elasticsearch - 无法访问 kibana 仪表板