#elasticsearch
#elasticsearch
Вопрос:
Я пытаюсь получить сгруппированные данные с помощью составной агрегации.
Поле группировки — «fromNumber». Я хочу сгруппировать (по «fromNumber») записи вызовов по убыванию (по «callStartStamp»).
Допустим, у меня есть 400 записей, и учитывая эти записи;
- fromNumber=0212 123…. callStartStamp=»2020-09-09T08:14:38″
- fromNumber=0312 312…. callStartStamp=»2020-09-09T08:10:38″
- fromNumber=0502 313…. callStartStamp=»2020-09-10T08:10:38″
Когда я запускаю приведенный ниже код, я ожидаю получить данные в порядке 3, 1, 2 и так далее.
Когда я даю размер корзины 20, я не могу получить 3. record, потому что он получает данные, отсортированные по возрастанию (по ключу). Он возвращает 1, 2 .. и так далее. Поскольку 1. и 2. записи имеют «fromNumber», начинающийся с «02» и «03. 3. Записи начинаются с «05».
Таким образом, очередь (по возрастанию) не доходит до 3. запишите, чтобы получить сгруппированные данные (из-за размера 20).
Если я задам размер корзины 300, 3. данные также поступают, потому что они достигают данных по возрастанию (по ключу).
Итак, я попытался упорядочить данные по убыванию с помощью «callStartStamp» перед агрегацией. Но это не работает.
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"term": {
"firmId": {
"value": 8525,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"sort": [
{
"callStartStamp": {
"order": "desc"
}
}
],
"aggregations": {
"fromNumberAgg": {
"composite": {
"size": 20,
"sources": [
{
"byFromNumber": {
"terms": {
"field": "fromNumber",
"missing_bucket": false,
"order": "asc"
}
}
}
],
"after": {
"byFromNumber": ""
}
},
"aggregations": {
"hits": {
"top_hits": {
"from": 0,
"size": 1000,
"version": false,
"seq_no_primary_term": false,
"explain": false,
"sort": [
{
"callStartStamp": {
"order": "desc"
}
}
]
}
},
"lastCallStart": {
"max": {
"field": "callStartStamp"
}
},
"sortByCallStart": {
"bucket_sort": {
"sort": [
{
"lastCallStart": {
"order": "desc"
}
}
],
"from": 0,
"gap_policy": "SKIP"
}
}
}
}
}
}