Существует ли агрегация Elasticsearch для дат, эквивалентных GeoTile Grid? - PullRequest
0 голосов
/ 07 июня 2019

Допустим, у меня есть данные, основанные на времени, например:

POST /events/_bulk?refresh
{"index":{"_id":1}}
{"timestamp": "2019-06-07T01:55:23.432+00:00", "type": "enter"}
{"index":{"_id":2}}
{"timestamp": "2019-06-07T01:58:33.100+00:00", "type": "exit"}
{"index":{"_id":3}}
{"timestamp": "2019-06-07T02:03:04.867+00:00", "type": "exit"}
{"index":{"_id":4}}
{"timestamp": "2019-06-07T02:12:11.108+00:00", "type": "enter"}
{"index":{"_id":5}}
{"timestamp": "2019-06-07T02:22:58.771+00:00", "type": "enter"}
{"index":{"_id":6}}
{"timestamp": "2019-06-07T03:37:28.844+00:00", "type": "exit"}

И я хочу сгруппировать события, которые произошли в течение 15 минут друг от друга, очень похоже на Сетка GeoTile группирует точки, которые географически расположены рядом друг с другом.

Полученный ответ будет выглядеть так:

{
    ...
    "aggregations": {
        "time-clumps": {
            "buckets": [
                {
                  "from" : "2019-06-07T01:55:23.432+00:00",
                  "to"   : "2019-06-07T02:10:23.432+00:00",
                  "doc_count" : 3
                },
                {
                  "from" : "2019-06-07T02:12:11.108+00:00",
                  "to"   : "2019-06-07T02:27:11.108+00:00",
                  "doc_count" : 2
                },
                {
                  "from" : "2019-06-07T03:37:28.844+00:00",
                  "to"   : "2019-06-07T03:52:28.844+00:00",
                  "doc_count" : 1
                }
            ]
        }
    }
}

Есть ли способ написать этот запрос в Elasticsearch?

1 Ответ

0 голосов
/ 07 июня 2019

Я бы сделал это с date_histogram агрегацией :

POST /events/_search
{
    "size": 0,
    "aggs" : {
        "time-clumps" : {
            "date_histogram" : {
                "field" : "timestamp",
                "interval" : "15m"
            }
        }
    }
}
...