Упругая поисковая вложенная агрегация с последующей агрегацией терминов с последующей вложенной агрегацией
У меня есть индекс со структурой, которая не имеет. раз пользователь входит в систему и выглядит следующим образом:
[{
"users_id": 5,
"uname": "abcdef",
"status": "active",
"groups_id": 2,
"user_login": [{
"user_logins_id": 12,
"users_id": 5,
"success": "t",
"type": "login",
"date": "2017/01/02",
"ip_address": "198.27.146.70"
},
{
"user_logins_id": 13,
"users_id": 5,
"success": "t",
"type": "logout",
"date": "2017/01/02",
"ip_address": "198.27.146.70"
},
{
"user_logins_id": 12,
"users_id": 5,
"success": "t",
"type": "login",
"date": "2017/01/03",
"ip_address": "198.27.146.70"
},
{
"user_logins_id": 13,
"users_id": 5,
"success": "t",
"type": "logout",
"date": "2017/01/03",
"ip_address": "198.27.146.70"
}
],
"role": "Student"
},
{
"users_id": 2,
"uname": "xyz",
"status": "active",
"groups_id": 1,
"user_login": [{
"user_logins_id": 16,
"users_id": 2,
"success": "t",
"type": "login",
"date": "2017/01/05",
"ip_address": "198.27.146.70"
},
{
"user_logins_id": 17,
"users_id": 5,
"success": "t",
"type": "logout",
"date": "2017/01/06",
"ip_address": "198.27.146.70"
}
],
"role": "Professor"
}
]
Вопрос: Необходимо знать, сколько раз пользователь определенной роли входил в данный диапазон дат (результаты за день). Решение: Я применил гистограмму даты в поле user_login.date (вложенный документ) и агрегирование терминов в поле роли, которое находится на корневом уровне (с использованием обратной вложенной агрегации), далее я написал вложенную агрегацию. Гистограмма даты возвращает вложенные области больше указанного диапазона дат.
Следующий запрос, который я пробовал:
{
"size": 0,
"query": {
"bool": {
"must": [
{
"term": {
"status.keyword": {
"value": "active"
}
}
},
{
"nested": {
"path": "user_login",
"query": {
"bool": {
"must": [
{
"range": {
"user_login.date": {
"from": "2017/01/02",
"to": "2017/01/02",
"include_lower": true,
"include_upper": true,
"format": "yyyy/MM/dd",
"boost": 1
}
}
},
{
"match": {
"user_login.type": "login"
}
}
]
}
}
}
}
]
}
},
"aggs": {
"histo": {
"nested": {
"path": "user_login"
},
"aggs": {
"histogrammm": {
"date_histogram": {
"field": "user_login.date",
"interval": "day"
},
"aggs": {
"reverzzzwayyy": {
"reverse_nested": {},
"aggs": {
"roles": {
"terms": {
"field": "role.raw",
"size": 10
},
"aggs": {
"logins1": {
"nested": {
"path": "user_login"
},
"aggs": {
"logins2": {
"filter": {
"bool": {
"must": [
{
"range": {
"user_login.date": {
"from": "2017/01/02",
"to": "2017/01/02",
"include_lower": true,
"include_upper": true,
"format": "yyyy/MM/dd",
"boost": 1
}
}
},
{
"term": {
"user_login.type": {
"value": "login",
"boost": 1
}
}
}
]
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Приведенный выше запрос возвращает подкадр гистограммы даты даже для "2017/01/03", что неверно. Любое решение для решения этой проблемы?