Как написать скриптовое поле, чтобы узнать количество дней между переходом статуса - PullRequest
0 голосов
/ 17 октября 2019

У меня есть два поля в индексе с именем create_on и closed_on с форматом даты 15 июля 2019 г., 17: 40: 09.000, я хочу написать безболезненное поле со сценарием для вычисления количества дней между этими двумя датами.

Я пробовал это:

def res_date= 0; 
def closing_date = 0;
if ( doc['status_id'].value == 51 ) {
res_date = doc['e_created_date'].date.getMillis();
}
if ( doc['status_id'].value == 20 ) {
closing_date = doc['closed_on'].date.getMillis();
}
def day = 0;
day= (closing_date - res_date) / (1000 * 60 * 60 * 24);  
return day;

Я получаю неправильное значение дня.

Пример данных

1 Ответ

1 голос
/ 17 октября 2019

Итак, вам нужно агрегировать по issue_id, а затем найти количество дней между моментом, когда проблема была открыта (статус 20) и когда она была закрыта (статус 51).

Вы должны бытьв состоянии выполнить запрос ниже и найти именно то, что вам нужно, в поле diff_days в ответе:

GET test2/_search
{
  "size": 0,
  "aggs": {
    "issues": {
      "terms": {
        "field": "issue_id",
        "size": 10
      },
      "aggs": {
        "openedStatus": {
          "filter": {
            "term": {
              "status_id": "51"
            }
          },
          "aggs": {
            "openedDate": {
              "min": {
                "field": "created_on"
              }
            }
          }
        },
        "closedStatus": {
          "filter": {
            "term": {
              "status_id": "20"
            }
          },
          "aggs": {
            "closedDate": {
              "min": {
                "field": "closed_on"
              }
            }
          }
        },
        "diff_days": {
          "bucket_script": {
            "buckets_path": {
              "opened": "openedStatus>openedDate",
              "closed": "closedStatus>closedDate"
            },
            "script": "(params.closed - params.opened) / 86400000"
          }
        }
      }
    }
  }
}

Results =>

"issues" : {
  "doc_count_error_upper_bound" : 0,
  "sum_other_doc_count" : 0,
  "buckets" : [
    {
      "key" : 167893,
      "doc_count" : 3,
      "closedStatus" : {
        "doc_count" : 1,
        "closedDate" : {
          "value" : 1.565005134E12,
          "value_as_string" : "2019-08-05T11:38:54.000Z"
        }
      },
      "openedStatus" : {
        "doc_count" : 2,
        "openedDate" : {
          "value" : 1.559556432E12,
          "value_as_string" : "2019-06-03T10:07:12.000Z"
        }
      },
      "diff_days" : {
        "value" : 63.06368055555556                     <--- 63 days
      }
    }
  ]
}
...