Ну, я попробовал кое-что, и я надеюсь, что это будет полезно.Я использовал функцию Serial Difference Aggregation Elasticsearch
, и вы можете обратиться к этой LINK для получения более подробной информации.
Допустим, у меня есть three
документов за эту неделю, т.е. week starting from 2018-10-15
и только one
документ за последнюю неделю, т. Е. week starting from 2018-10-08
Разница пользователей, созданных в течение недели 2018-10-15
будет 2
Ниже приведен пример запроса, с которым я столкнулся, который показал бы вам разницу по сравнению с предыдущей неделей.
Запрос
POST testdateindex/_search
{
"size" : 0,
"query" : {
"bool" : {
"must" : {
"range" : {
"created" : {
"from":"now-2w",
"to":"now",
"include_lower" : true,
"include_upper" : true
}
}
}
}
},
"aggs": {
"customers_over_time": {
"date_histogram": {
"field": "created",
"interval": "week"
},
"aggs": {
"difference": {
"serial_diff": {
"buckets_path": "_count",
"lag" : 1
}
}
}
}
}
}
Я использовал lag
как 1
, поскольку в этом случае вам требуется только разница между двумя неделями подряд или сегментами.
Результат запроса:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 0,
"hits": []
},
"aggregations": {
"customers_over_time": {
"buckets": [
{
"key_as_string": "2018-10-08T00:00:00.000Z",
"key": 1538956800000,
"doc_count": 1
},
{
"key_as_string": "2018-10-15T00:00:00.000Z",
"key": 1539561600000,
"doc_count": 3,
"difference": {
"value": 2
}
}
]
}
}
}
В результате будет отображаться количество всех документов за эту неделю вместе с частью difference
в указанном выше json, которая будет содержать разницу в числе к числуна прошлой неделе.
Обратите внимание, что в первом сегменте нет difference
, потому что я не создавал никаких документов до этой недели.
Надеюсь, это поможет!