Процентная агрегация Elasticsearch на двух полях - PullRequest
0 голосов
/ 27 февраля 2020

Я хотел бы получить Q1 и Q2 из набора значений, который распределен в двух полях.

Мои документы выглядят так:

{
   amount: 100,
   type: "CREDIT"
}
{
   amount: 80,
   type: "DEBIT"
}

Эти суммы представляют собой фактически значения 100 и -80 соответственно.

Допустим, все мои значения моей коллекции [100, -80, 20, -30, 50], поэтому мои процентили будут Q1=-30 и Q3=-50.

Как мне написать запрос, который говоритasticsearh c, что документы с типом : "DEBIT" необходимо учитывать как отрицательные значения, а затем выполнять агрегирование в процентилях?

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать скрипт для выполнения процентили агрегации. Ниже скрипт проверяет, является ли тип дебетовым, затем возвращает отрицательное значение, иначе возвращает положительное значение

"aggs": {
    "percentile_val": {
      "percentiles": {
        "script": {
          "lang": "painless",
          "source": "if( doc['type.keyword'].value=='DEBIT') { return -doc['amount'].value;} else {doc['amount'].value}"
        }
      }
    }
  }
...