Группировка, расчет и порядок данных ElasticSearch - PullRequest
0 голосов
/ 03 ноября 2019

У меня много данных, хранящихся в следующем формате (я упростил данные, чтобы объяснить проблему).

enter image description here

Что мне нужно, так это:

  • сгруппировать все данные по полю «Идентификатор действия»
  • вычислить разницу между максимальными и минимальными значениями «Созданного времени» для каждой группы (из предыдущего действия)
  • упорядочить результаты по вычисляемому полю («Длительность действия» - разница между макс. И мин.)

Я использую NEST (C #) для запроса ElasticSearch. Я думаю, что если вы можете помочь мне с нативным запросом Elastic, он также будет очень полезен, я переведу его на C #.

Спасибо.

1 Ответ

1 голос
/ 03 ноября 2019

Если ваши сопоставления выглядят так:

PUT /index
{
  "mappings": {
    "doc": {
      "properties": {
        "ActionId": {
          "type": "text",
          "fielddata": true
        },
        "CreatedDate":{
          "type": "date"
        },
        "SubActionName":{
          "type": "text",
          "fielddata": true
        }
      }
    }
  }
}

Ваш запрос эластичного поиска должен выглядеть следующим образом:

GET index/_search
{
  "size": 0,
  "aggs": {

    "actions": {
      "terms": {
        "field": "ActionId"
      },
      "aggs": {
        "date_created": {
          "date_histogram": {
            "field": "CreatedDate",
            "interval": "hour"
          },
          "aggs": {
            "the_max": {
              "max": {
                "field": "CreatedDate"
              }
            },
            "the_min": {
              "min": {
                "field": "CreatedDate"
              }
            },
            "diff_max_min": {
              "bucket_script": {
                "buckets_path": {
                  "max": "the_max",
                  "min": "the_min"
                },
                "script": "params.max - params.min"
              }
            }

          }
        }
      }
    }
  }
}

Подробнее об объединении конвейеров можно прочитать здесь

Надеюсь, это поможет

...