Невозможно создать вложенный запрос агрегации дат - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь создать запрос агрегации ElasticSearch, который может генерировать сумму или среднее значение во всех моих загруженных документах.

Документы имеют формат -

{
"weather":"cold",
"date_1":"2017/07/05",
"feedback":[
    {
    "date_2":"2017/08/07",
    "value":28,
    "comment":"not cold"
    },{
    "date_2":"2017/08/09",
    "value":48,
    "comment":"a bit chilly"
    },{
    "date_2":"2017/09/07",
    "value":18,
    "comment":"very cold"
    }, ...
    ]
}

Явозможность создать совокупную сумму всех «feedback.value», используя «date_1», используя следующий запрос -

GET _search
{
"query": {
        "query_string": {
                "query": "cold"
                 }
        },
"size": 0,
"aggs": {
        "temperature": {
                    "date_histogram":{
                                      "field" : "date_1",
                                      "interval" : "month"
                                      },
                      "aggs":{
                              "temperature_agg":{
                                                "terms": {
                                                        "field": "feedback.value"
                                                          }
                                                }
                              }

                    }
        }
}

Однако мне нужно сгенерировать один и тот же запрос для всех документов, агрегированных на основе «обратной связи».дата_2" .Я не уверен, что ElasticSearch может разрешить такую ​​агрегацию или как к ней подойти.Было бы полезно любое руководство

1 Ответ

1 голос
/ 11 апреля 2019

Вам нужно будет использовать вложенные документы и сумма агрегации .

Вот рабочий пример:

Пример отображения:

PUT test
{
  "mappings": {
    "doc": {
      "properties": {
        "feedback": {
          "type": "nested"
        }
      }
    }
  }
}

Добавить образец документа:

PUT test/doc/1
{
   "date_1": "2017/08/07",
  "feedback": [
    {
      "date_2": "2017/08/07",
      "value": 28,
      "comment": "not cold"
    },
    {
      "date_2": "2017/08/09",
      "value": 48,
      "comment": "a bit chilly"
    },
    {
      "date_2": "2017/09/07",
      "value": 18,
      "comment": "very cold"
    }
  ]
}

Рассчитать как сумму, так и среднее значение на основе даты_2.

GET test/_search
{
  "size": 0,
  "aggs": {
    "temperature_aggregation": {
      "nested": {
        "path": "feedback"
      },
      "aggs": {
        "temperature": {
          "date_histogram": {
            "field": "feedback.date_2",
            "interval": "month"
          },
          "aggs": {
            "sum": {
              "sum": {
                "field": "feedback.value"
              }
            },
             "avg": {
              "avg": {
                "field": "feedback.value"
              }
            }
          }
        }
      }
    }
  }
}
...