Упругая поисковая вложенная агрегация с последующей агрегацией терминов с последующей вложенной агрегацией

У меня есть индекс со структурой, которая не имеет. раз пользователь входит в систему и выглядит следующим образом:

[{
        "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", что неверно. Любое решение для решения этой проблемы?

0 ответов

Другие вопросы по тегам